@phenixrts/sdk 2023.2.17-beta.122 → 2023.2.17-beta.124
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/channels/debug/channels.js +10 -2
- package/channels/debug/package.json +1 -1
- package/channels/debug.private/channels.js +10 -2
- package/channels/debug.private/package.json +1 -1
- package/channels/es5.debug.private/channels.js +10 -2
- package/channels/es5.debug.private/package.json +1 -1
- package/channels/min/channels.js +1 -1
- package/channels/min/channels.js.map +1 -1
- package/channels/min/package.json +1 -1
- package/channels/min.private/channels.js +1 -1
- package/channels/min.private/channels.js.map +1 -1
- package/channels/min.private/package.json +1 -1
- package/channels/package.json +1 -1
- package/full/debug/full.js +10 -2
- package/full/debug/package.json +1 -1
- package/full/debug.private/full.js +10 -2
- package/full/debug.private/package.json +1 -1
- package/full/min/full.js +1 -1
- package/full/min/full.js.map +1 -1
- package/full/min/package.json +1 -1
- package/full/min.private/full.js +1 -1
- package/full/min.private/full.js.map +1 -1
- package/full/min.private/package.json +1 -1
- package/full/package.json +1 -1
- package/package.json +1 -1
- package/publish/debug/package.json +1 -1
- package/publish/debug/publish.js +1 -1
- package/publish/debug.private/package.json +1 -1
- package/publish/debug.private/publish.js +1 -1
- package/publish/min/package.json +1 -1
- package/publish/min/publish.js +1 -1
- package/publish/min.private/package.json +1 -1
- package/publish/min.private/publish.js +1 -1
- package/publish/package.json +1 -1
|
@@ -9356,6 +9356,10 @@ var InsertableStreams = /*#__PURE__*/function () {
|
|
|
9356
9356
|
value: function applyEncodedStreamTransformation(stream, receivers, encodedVideoStreamSink, encodedAudioStreamSink) {
|
|
9357
9357
|
var h264IFrame2x2 = new Uint8Array([0x00, 0x00, 0x00, 0x01, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x67, 0xf4, 0x00, 0x0a, 0x91, 0x9b, 0x2b, 0xf1, 0xf1, 0xf8, 0x08, 0x80, 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x19, 0x07, 0x89, 0x12, 0xcb, 0x00, 0x00, 0x00, 0x01, 0x68, 0xeb, 0xe3, 0xc4, 0x48, 0x44, 0x00, 0x00, 0x01, 0x65, 0x88, 0x82, 0x00, 0x3f, 0x70, 0x23, 0x86, 0xe6, 0xd1, 0x80, 0x09, 0xaf, 0x0a, 0x41, 0x66, 0x6b, 0x54, 0x46, 0xfb, 0x71, 0xd9, 0x7f, 0xff, 0xff, 0xf9]);
|
|
9358
9358
|
var h264PFrame2x2 = new Uint8Array([0x00, 0x00, 0x00, 0x01, 0x09, 0xf0, 0x00, 0x00, 0x00, 0x01, 0x41, 0x9a, 0x68, 0x49, 0xa8, 0x41, 0x68, 0x99, 0x4c, 0x0f, 0xff, 0x92, 0x81]);
|
|
9359
|
+
var vp8IFrame1x1 = new Uint8Array([0xb0, 0x02, 0x00, 0x9d, 0x01, 0x2a, 0x01, 0x00, 0x01, 0x00, 0x39, 0x6b, 0x00, 0x27, 0x1c, 0x24, 0x0c, 0x2c, 0x2c, 0x44, 0xcc, 0x24, 0x41, 0xa8, 0x00, 0x13, 0xa7, 0xa3, 0x7a, 0x50, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]);
|
|
9360
|
+
var vp8PFrame1x1 = new Uint8Array([0x31, 0x03, 0x00, 0xe4, 0xe0, 0xa8, 0x9b, 0x37, 0xaf, 0x10, 0x4f, 0x4f, 0xb1, 0x0a, 0x2f, 0xe4, 0x92, 0xc0, 0x1f, 0xe7, 0x4f, 0x46, 0xff, 0xee, 0x51, 0xc1, 0x5d, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]);
|
|
9361
|
+
var vp9IFrame1x1 = new Uint8Array([0x82, 0x49, 0x83, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x76, 0x38, 0x24, 0x1c, 0x19, 0xa0, 0x00, 0x00, 0x20, 0x40, 0x00, 0x11, 0xbf, 0xdd, 0x77, 0xff, 0x40, 0x7f, 0xb1, 0x00]);
|
|
9362
|
+
var vp9PFrame1x1 = new Uint8Array([0x86, 0x00, 0x40, 0x92, 0x9c, 0x24, 0x48, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x4b, 0x40]);
|
|
9359
9363
|
var opusSilent = new Uint8Array([0x68, 0x07, 0xd9, 0xab, 0xbc, 0x79, 0x87, 0xab, 0x8e, 0x4a, 0x14, 0xf3, 0xa7, 0x1c, 0xf2, 0x9a, 0x7a, 0x45, 0xa7, 0x2d, 0x44, 0x25, 0x74, 0x4c, 0xad, 0x16, 0xb3, 0x0e, 0x51, 0x57, 0xea, 0xe7, 0xad, 0x2a, 0x38, 0xce, 0x33]);
|
|
9360
9364
|
var invalidFrame = new Uint8Array([0x00]);
|
|
9361
9365
|
stream.getTracks().forEach(function (track) {
|
|
@@ -9382,6 +9386,10 @@ var InsertableStreams = /*#__PURE__*/function () {
|
|
|
9382
9386
|
}
|
|
9383
9387
|
if (videoCodec === 'video/H264') {
|
|
9384
9388
|
chunk.data = chunk.type === 'key' ? h264IFrame2x2.buffer : h264PFrame2x2.buffer;
|
|
9389
|
+
} else if (videoCodec === 'video/VP8') {
|
|
9390
|
+
chunk.data = chunk.type === 'key' ? vp8IFrame1x1.buffer : vp8PFrame1x1.buffer;
|
|
9391
|
+
} else if (videoCodec === 'video/VP9') {
|
|
9392
|
+
chunk.data = chunk.type === 'key' ? vp9IFrame1x1.buffer : vp9PFrame1x1.buffer;
|
|
9385
9393
|
}
|
|
9386
9394
|
}
|
|
9387
9395
|
controller.enqueue(chunk);
|
|
@@ -9600,7 +9608,7 @@ var VersionManager = /*#__PURE__*/function () {
|
|
|
9600
9608
|
key: "sdkVersion",
|
|
9601
9609
|
get: function get() {
|
|
9602
9610
|
try {
|
|
9603
|
-
return "2023-09-
|
|
9611
|
+
return "2023-09-12T21:22:15.432Z (2023.2.17-beta.124)";
|
|
9604
9612
|
} catch (e) {
|
|
9605
9613
|
return this._defaultVersion;
|
|
9606
9614
|
}
|
|
@@ -10521,4 +10529,4 @@ var VideoTelemetry = /*#__PURE__*/function () {
|
|
|
10521
10529
|
/******/ })()
|
|
10522
10530
|
;
|
|
10523
10531
|
});
|
|
10524
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfY2xhc3MiLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsIl9zZW5kTWV0cmljc0lmQWJsZSIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl94IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJhcHBseSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInVzZWRDb2RlY0xpbmUiLCJzZHBMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiX3gzIiwiZGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldFNlbmRlcnMiLCJnZXRSZWNlaXZlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsIl9zdG9wIiwiX3Jlc3VtZSIsIl9kaXNwb3NlIiwiX3N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX3BsYXkiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIlRva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiU3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJ1cGRhdGVUYXJnZXRMYWciLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwicmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwicHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiRW5jb2RlZFN0cmVhbVNpbmsiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsImZpbmFsbHkiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJwbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsIl91cmkiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfcGluZyIsIl9zdWJzY3JpYmUiLCJfcHVibGlzaCIsIl9saW1pdEJpdHJhdGUiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsIl9kZXN0cm95U3RyZWFtIiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX3g4IiwiX3g5Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDIwIiwiX3gyMSIsInNlbmRCZWFjb24iLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfeDIyIiwiX3gyMyIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjQiLCJfeDI1IiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfeDI2IiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI3IiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI4IiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsIkNodW5rZWRTdHJlYW1pbmciLCJwbGF5ZXIiLCJtb25pdG9yIiwiX21vbml0b3JEaXNwb3NhYmxlcyIsIm5ld1N0cmVhbVN0YXRpc3RpY3MiLCJfc3RyZWFtU3RhdGlzdGljcyIsImN1cnJlbnRUaW1lIiwiZGF0YUJ1ZmZlcmVkIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJwYXVzZWQiLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsIl9vcHRpb25zIiwibG9hZGVkIiwiX3BlbmRpbmciLCJfcGxheWVyIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIkhsc1BsYXllciIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMyQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJJbnNlcnRhYmxlU3RyZWFtcyIsIl9JbnNlcnRhYmxlU3RyZWFtcyRhcCIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwibW9kZSIsImFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uIiwicmVjZWl2ZXJzIiwiaDI2NElGcmFtZTJ4MiIsIlVpbnQ4QXJyYXkiLCJoMjY0UEZyYW1lMngyIiwib3B1c1NpbGVudCIsImludmFsaWRGcmFtZSIsInJlY2VpdmVyIiwicmVjZWl2ZSIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNodW5rIiwiY29udHJvbGxlciIsImJ1ZmZlciIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInRyYW5zZm9ybSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbiIsIk1lZGlhU3RyZWFtIiwiaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwidmlkZW9UcmFjayIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInJlbW92ZVRyYWNrIiwiYXVkaW9UcmFjayIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJfdGVsZW1ldHJ5U2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJfc2VuZExvZ3NJZkFibGUiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztB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QUF5QixTQUFTLHNCQUF5QjtBQUNoRTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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RSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVkLElBQU1DLGFBQWEsR0FBRyxJQUFJRCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEwsSUFBTUUsVUFBVSxHQUFHLElBQUlGLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElB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V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXI/LnByb3RvdHlwZT8uY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5jb25zdCBtYXhCdWZmZXJlZFJlY29yZHMgPSAyMDQ4O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignTWV0cmljc1NlcnZpY2UnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9mYWlsdXJlQ291bnQgPSAwO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBmYWxzZSk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uICYmICFlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfTtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybUNvbnRleHQge1xuICByZWFkb25seSBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuICAgIHRoaXMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDY6XG4gICAgICAgIHJldHVybiAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHBlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmZvckVhY2goZGlzcG9zYWJsZSA9PiB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZSkpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpIHx8IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdvbi1kZW1hbmQnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRW5jb2RlZFN0cmVhbVNpbms8VCA9IFJUQ0VuY29kZWRBdWRpb0ZyYW1lIHwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBUKTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNvZGVkU3RyZWFtU2luayB7XG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMi4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWRTdHJlYW1TaW5rIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBhcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4sIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4pIDogdm9pZCB7XG4gICAgY29uc3QgaDI2NElGcmFtZTJ4MiA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSk7XG4gICAgY29uc3QgaDI2NFBGcmFtZTJ4MiA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSk7XG4gICAgY29uc3Qgb3B1c1NpbGVudCA9IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSk7XG4gICAgY29uc3QgaW52YWxpZEZyYW1lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gcmVjZWl2ZXJzLmZpbHRlcihyZWNlaXZlID0+IHJlY2VpdmUudHJhY2sgPT09IHRyYWNrKVswXTtcblxuICAgICAgc3dpdGNoICh0cmFjay5raW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGlmIChlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICAgICAgICBsZXQgdmlkZW9Db2RlYzogc3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIDogVHJhbnNmb3JtZXJUcmFuc2Zvcm1DYWxsYmFjazxSVENFbmNvZGVkVmlkZW9GcmFtZSwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlbmNvZGVkVmlkZW9TdHJlYW1TaW5rKHRyYWNrLCBjaHVuaykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IGludmFsaWRGcmFtZS5idWZmZXI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF2aWRlb0NvZGVjKSB7XG4gICAgICAgICAgICAgICAgICByZWNlaXZlci5nZXRTdGF0cygpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKHJlcG9ydCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY29kZWMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0NvZGVjID0gcmVwb3J0Lm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmlkZW9Db2RlYyA9PT0gJ3ZpZGVvL0gyNjQnKSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gKGNodW5rLnR5cGUgPT09ICdrZXknKSA/IGgyNjRJRnJhbWUyeDIuYnVmZmVyIDogaDI2NFBGcmFtZTJ4Mi5idWZmZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0NvZGVjOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gaW52YWxpZEZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1ZGlvQ29kZWMpIHtcbiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmdldFN0YXRzKCkudGhlbihzdGF0cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjb2RlYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvQ29kZWMgPSByZXBvcnQubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhdWRpb0NvZGVjID09PSAnYXVkaW8vb3B1cycpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBvcHVzU2lsZW50LmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KSA6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW119IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHN3aXRjaCAodHJhY2sua2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYWNrVHJhbnNmb3JtIHtcbiAgc3RhdGljIHZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybShtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50c1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
|
10532
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlXaXRob3V0SG9sZXMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHMuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlUmVzdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVNwcmVhZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGVMaXN0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L0NoYW5uZWxDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0YXRlQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvVG9rZW5Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZU1vZGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVTdGF0ZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5VXJpLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0VuZFBvaW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlBcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9EaW1lbnNpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbImRlZmF1bHREb2N1bWVudEZvY3VzSW50ZXJ2YWxUaW1lb3V0IiwiQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJEaXNwb3NhYmxlTGlzdCIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiU3ViamVjdCIsIl9yZWFkT25seUlzRm9yZWdyb3VuZCIsIlJlYWRPbmx5U3ViamVjdCIsImRldGVjdFRhYkZvY3VzQ2hhbmdlIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwidmFsdWUiLCJnZXRUaW1lU2luY2VMYXN0Q2hhbmdlIiwiX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZSIsImRpc3Bvc2UiLCJfZGlzcG9zYWJsZXMiLCJfdGhpcyIsImhpZGRlbiIsInZpc2liaWxpdHlDaGFuZ2UiLCJkb2N1bWVudCIsIl90eXBlb2YiLCJtc0hpZGRlbiIsIndlYmtpdEhpZGRlbiIsImhhbmRsZVZpc2liaWxpdHlDaGFuZ2UiLCJpc0ZvcmVncm91bmQiLCJzZXRGb2N1c1N0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFkZCIsIkRpc3Bvc2FibGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJCcm93c2VyRGV0ZWN0b3IiLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiX2Jyb3dzZXJOYW1lIiwiX2Jyb3dzZXJNYWpvclZlcnNpb24iLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfbmF2aWdhdG9yIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfY2xhc3MiLCJpbmNsdWRlcyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJUZWxlbWV0cnlEZWZhdWx0IiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIkxvZ2dlckRlZmF1bHRzIiwibWV0YVZhbHVlIiwicXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwidW5kZWZpbmVkIiwiR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIiLCJFcnJvciIsImZvcmNlR2FyYmFnZUNvbGxlY3Rpb24iLCJGZWF0dXJlRW5hYmxlbWVudCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsInNldFRpbWVvdXQiLCJpbWciLCJjcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwiaXNTdXBwb3J0ZWQiLCJzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMiLCJ1cGRhdGVTdGF0aXN0aWNzIiwiX2lzU3VwcG9ydGVkIiwiX3J0dCIsIl9lZmZlY3RpdmVUeXBlIiwiX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJkb3dubGluayIsImRvd25saW5rTWF4IiwiZ2V0RWZmZWN0aXZlVHlwZSIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsInJ0dCIsImxpc3RlbmVyIiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsIkxvZ2dlckZhY3RvcnkiLCJTREsiLCJfc3RhcnRUaW1lIiwiX3BhZ2VMb2FkVGltZSIsInN1Y2Nlc3MiLCJzdHJlYW1JZCIsInJlY29yZFN0cmVhbU1ldHJpYyIsIk1ldHJpY3NUeXBlIiwiZmFpbCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsIk1ldHJpY1R5cGUiLCJnZXROYW1lIiwibWV0cmljc1NlcnZpY2UiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwiRHVyYXRpb25zIiwidG9Jc29TdHJpbmciLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiRWRnZVRva2VuIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiX2RvY3VtZW50IiwiTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciIsIk1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IiLCJfUlRDUnRwUmVjZWl2ZXIiLCJfUlRDUnRwUmVjZWl2ZXIkcHJvdG8iLCJSVENSdHBSZWNlaXZlciIsInByb3RvdHlwZSIsImNyZWF0ZUVuY29kZWRTdHJlYW1zIiwiUGFyYW1ldGVycyIsIl9kaXNjb3ZlcnlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbWV0ZXJzIiwicGFyYW1ldGVycyIsIl9fUEFSQU1FVEVSU19fIiwiZGlzY292ZXJ5IiwiaW50ZW50aW9ucyIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwiU3RyaW5ncyIsInJhbmRvbSIsInJhbmRvbTEzQ2hhcmFjdGVycyIsIk1hdGgiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJMb2dnaW5nTGV2ZWwiLCJjb25zb2xlIiwiTG9nZ2VyIiwiYXBwZW5kZXJzIiwiX2NhdGVnb3J5IiwidHJhY2UiLCJUcmFjZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJhcmdzIiwiX2tleSIsImRlYnVnIiwiRGVidWciLCJfbGVuMiIsIl9rZXkyIiwiSW5mbyIsIl9sZW4zIiwiX2tleTMiLCJ3YXJuIiwiV2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5Iiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJnZXRMb2dnZXIiLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJiaW5kIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwibG9nZ2luZ0xldmVsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRlbGVtZXRyeUxldmVsIiwiTWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfdXJsIiwic2V0IiwidXJsIiwibWV0cmljc1VybCIsInBhdGhuYW1lIiwiX2Vudmlyb25tZW50IiwiZW52aXJvbm1lbnQiLCJfdGVuYW5jeSIsInRlbmFuY3kiLCJfc2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc1NlcnZpY2UiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsIl9zZW5kTWV0cmljc0lmQWJsZSIsImhvc3RuYW1lIiwiX21ldHJpY3NDb25maWd1cmF0aW9uIiwiX2V4cG9uZW50aWFsQmFja29mZiIsIkV4cG9uZW50aWFsQmFja29mZiIsIm1ldHJpYyIsInByZXZpb3VzVmFsdWUiLCJyZXNvdXJjZSIsImtpbmQiLCJtZXRyaWNSZWNvcmQiLCJ0aW1lc3RhbXAiLCJmdWxsUXVhbGlmaWVkTmFtZSIsIl9kb21haW4iLCJWZXJzaW9uTWFuYWdlciIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl94IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZWNvcmRzIiwiZmV0Y2giLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJhcHBseSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiX2lzU2VuZGluZyIsInNsaWNlIiwidGhlbiIsInJlc3BvbnNlIiwiaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUiLCJfZmFpbHVyZUNvdW50IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCIsImNhdGNoIiwiX3JlZiIsInN0YXR1cyIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlIiwiY2FsbGJhY2siLCJUeXBlRXJyb3IiLCJfc3RhdGUiLCJfaGFuZGxlZCIsIl92YWx1ZSIsIl9kZWZlcnJlZHMiLCJkb1Jlc29sdmUiLCJkb25lIiwicHJvbWlzZVJlc29sdmUiLCJyZWFzb24iLCJwcm9taXNlUmVqZWN0IiwibmV3VmFsdWUiLCJwcm9taXNlIiwiZmluYWxlIiwiX2ltbWVkaWF0ZSIsIl91bmhhbmRsZWRSZWplY3Rpb24iLCJpIiwibGVuIiwiaGFuZGxlIiwiZGVmZXJyZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyZXN1bHQiLCJhbGwiLCJhcnIiLCJyZXNvbHZlIiwicmVqZWN0IiwiaXNBcnJheSIsInJlbWFpbmluZyIsIm1hbmFnZVJlc3BvbnNlIiwiY29uc3RydWN0b3IiLCJfIiwicmFjZSIsIlByb21pc2VIYW5kbGVyIiwiUGVlckNvbm5lY3Rpb25TZXJ2aWNlIiwiX3ByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX3BlZXJDb25uZWN0aW9uRmFjdG9yeSIsImluaXRpYXRlSW5pdGlhbFByZWNhY2hpbmciLCJwcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NhbGxlZTMiLCJlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJjb25maWd1cmF0aW9uIiwiX2FyZ3MzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdXBwb3J0c0FkZFRyYW5zY2VpdmVyIiwidmlkZW9UcmFuc2NlaXZlciIsImF1ZGlvVHJhbnNjZWl2ZXIiLCJvcHRpb25zIiwiYWRkVHJhbnNjZWl2ZXIiLCJ0MCIsInQxIiwidDIiLCJjcmVhdGVPZmZlciIsInQzIiwibG9jYWxPZmZlciIsIm9mZmVyVG9SZWNlaXZlQXVkaW8iLCJvZmZlclRvUmVjZWl2ZVZpZGVvIiwidDQiLCJ0NSIsIlZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl91cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJtZWRpYVN0cmVhbSIsImVzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfcGVlckNvbm5lY3Rpb24iLCJfZXN0aW1hdGVkUm91bmRUcmlwVGltZSIsIl90cmFja3NUb01vbml0b3IiLCJnZXRUcmFja3MiLCJtYXAiLCJ0cmFjayIsInBhcnNlZFNEUCIsIlNkcFBhcnNlciIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiX2lnbm9yZWQiLCJnZXRLaW5kRm9yU2FmYXJpMTEiLCJ1cGRhdGVTdGF0aXN0aWNMZWdhY3kiLCJpZCIsImdldFN0YXRzIiwic3RhdHMiLCJydGNTdGF0aXN0aWNzIiwicm91bmRUcmlwVGltZSIsImxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCIsInJlcG9ydCIsImN1cnJlbnRSb3VuZFRyaXBUaW1lIiwibWVkaWFUeXBlIiwiY29kZWMiLCJjb2RlY0lkIiwibWltZVR5cGUiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYyIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2MyIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjQiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHY1IiwiYnl0ZXMiLCJieXRlc1JlY2VpdmVkIiwicHJldmlvdXNCeXRlc1JlY2VpdmVkIiwiYnl0ZXNEZWx0YSIsInRpbWVEZWx0YSIsImJpdHJhdGUiLCJmbG9vciIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwicm91bmQiLCJnZXRTdGF0c0xlZ2FjeSIsIm5hbWVzIiwic3RhdCIsIl9zZHAiLCJzZHBTcGxpdEJ5TGluZXMiLCJzZHBTcGxpdEJ5VHJhY2tzIiwiX2F1ZGlvQ29kZWMiLCJhcHBseUNvZGVjIiwiX3ZpZGVvQ29kZWMiLCJfaXNBdWRpb1RyYWNrRW5hYmxlZCIsImlzVHJhY2tCeVR5cGVFbmFibGVkIiwiX2lzVmlkZW9UcmFja0VuYWJsZWQiLCJzZHBTZWN0aW9uRm9yVHlwZSIsImZpbmQiLCJzZHBUcmFjayIsInVzZWRDb2RlY0xpbmUiLCJzZHBMaW5lIiwidXNlZENvZGVjIiwiY29kZWNOYW1lIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uIiwiX2NyZWF0ZU9mZmVyIiwiX2NyZWF0ZUFuc3dlciIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwid2Via2l0UlRDUGVlckNvbm5lY3Rpb24iLCJSVENQZWVyQ29ubmVjdGlvbiIsImN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIiwiY29ubmVjdGlvblN0YXRlIiwiaWNlQ29ubmVjdGlvblN0YXRlIiwiZ2V0Q29uZmlndXJhdGlvbiIsInNldENvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXIiLCJfeDIiLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiX3gzIiwiZGVzY3JpcHRpb24iLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsIl94NCIsIl9jYWxsZWU0IiwiX2Rlc2NyaXB0aW9uJHNkcCIsImhhc0NyeXB0byIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldFNlbmRlcnMiLCJnZXRSZWNlaXZlcnMiLCJzZWxlY3RvciIsIl90aGlzMyIsImFkZFN0cmVhbSIsIl90aGlzNCIsImFkZFRyYWNrIiwib250cmFjayIsImhhbmRsZXIiLCJvbmljZWNhbmRpZGF0ZSIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJjbG9zZSIsIl9jcmVhdGVQZWVyQ29ubmVjdGlvbiIsInN1YmplY3QiLCJfc3ViamVjdCIsInN1YnNjcmliZSIsIkRpc3Bvc2FibGVMaXN0ZW5lciIsIl9EaXNwb3NhYmxlIiwiX2luaGVyaXRzIiwiX3N1cGVyIiwiX2NyZWF0ZVN1cGVyIiwibGlzdGVuZXJzIiwiaWR4IiwiX2xpc3RlbmVycyIsImNoYW5nZWQiLCJjb21wYXJhYmxlIiwiZXF1YWxzIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiYmFzZVVSTCIsIm9yaWdpbiIsIl9jbGllbnRTZXNzaW9uSWQiLCJfbG9hZGVkVGltZXN0YW1wIiwiX3JlYWRPbmx5SW5pdGlhbGl6ZWQiLCJfcmVhZE9ubHlEaXNjb3ZlcnlVcmkiLCJfcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJfYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlIiwiX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiX2F1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlIiwiX2ZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQiLCJfc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiX3dlYlBsYXllckxvYWRlciIsIl9zaGFrYVBsYXllckxvYWRlciIsIl9obHNKc0xvYWRlciIsIl9tZXRyaWNzU2VydmljZSIsIl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl90ZWxlbWV0cnlVcmwiLCJfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyIsInJldHJpZXNBbW91bnQiLCJfdGVsZW1ldHJ5TGV2ZWwiLCJhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJ0ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiaWdub3JlZEVudmlyb25tZW50IiwiaWdub3JlZERpc2NvdmVyeVVyaSIsInRlbGVtZXRyeVVybCIsInRlbGVtZXRyeUFwcGVuZGVyIiwiaWdub3JlZFRlbmFuY3kiLCJhcHBseU1ldHJpY3NDb25maWd1cmF0aW9uIiwiRGlzY292ZXJ5VXJpIiwiaWdub3JlZFRlbGVtZXRyeUxldmVsIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImRpc2NvdmVyeVVyaSIsImdldFRlbGVtZXRyeVVybCIsImNoYW5uZWxUb2tlbiIsInVyaVZhbHVlIiwiYmFzZVVSSVZhbHVlIiwiaW5pdCIsIl9pbml0aWFsaXplZCIsInBlZXJDb25uZWN0aW9uRmFjdG9yeSIsImNvbnNvbGVMb2dnaW5nTGV2ZWwiLCJjb25zb2xlQXBwZW5kZXIiLCJhdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtIiwiYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJ3ZWJQbGF5ZXJMb2FkZXIiLCJzaGFrYVBsYXllckxvYWRlciIsImhsc0pzTG9hZGVyIiwic2VnbWVudHMiLCJwcm90b2NvbCIsInVuc2hpZnQiLCJlbmRzV2l0aCIsImpvaW4iLCJCaXRyYXRlU3RhdGUiLCJCaXRyYXRlTW9kZSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsIl9zdG9wIiwiX3Jlc3VtZSIsIl9kaXNwb3NlIiwiX3N0YXJ0IiwiX3Byb2Nlc3NTdGFydCIsIl9yZXN0YXJ0QWZ0ZXJTdG9wIiwiX3BsYXkiLCJfaGFuZGxlU3RyZWFtRmFpbHVyZSIsIl9wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIlRva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIkNoYW5uZWxDb250ZXh0IiwiX3BlZXJDb25uZWN0aW9uQ29udGV4dCIsIlBlZXJDb25uZWN0aW9uQ29udGV4dCIsIl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiU3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJTdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJjaGFubmVsRGlzcG9zYWJsZXMiLCJfdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyIiwiaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQiLCJyZW5kZXJlckRpc3Bvc2FibGVzIiwidmlkZW9UZWxlbWV0cnkiLCJkYXRhc2V0IiwiVmlkZW9UZWxlbWV0cnkiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiQ2hhbm5lbFN0YXRlIiwicmVzdGFydEFmdGVyU3RvcCIsImNsZWFyRmFpbHVyZUNvdW50VGltZW91dCIsIm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyIsImVsYXBzZWRJbk1pbGxpc2Vjb25kcyIsImNoYW5uZWxJbml0aWFsaXphdGlvbiIsImdldFRpbWUiLCJsaW1pdEJpdHJhdGUiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic3RhcnQiLCJwYXVzZSIsInNyY09iamVjdCIsIndpZHRoIiwidmlkZW9XaWR0aCIsImhlaWdodCIsInZpZGVvSGVpZ2h0IiwiRGltZW5zaW9uIiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJ1cGRhdGVUYXJnZXRMYWciLCJpc1N0YXJ0aW5nIiwicHJvY2Vzc1N0b3AiLCJjbGVhblVwUmVzb3VyY2VzIiwicmVzdW1lIiwicGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJtdXRlIiwibXV0ZWQiLCJ1bm11dGUiLCJpc0Rpc3Bvc2VkIiwiZ2V0VXJpIiwicHJvY2Vzc1N0YXJ0IiwiX2NhbGxlZTUiLCJfdGhpczUiLCJsaXN0ZW5PblN0cmVhbVNldHVwIiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtIiwidmFsaWQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiX1N0cmVhbVRyYWNrVHJhbnNmb3JtMiIsIl92YWxpZCIsIl92YWxpZGF0aW9uUmVzdWx0IiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhIiwiX3ZhbGlkMiIsIl92YWxpZGF0aW9uUmVzdWx0MiIsIl9FbmNvZGVkU3RyZWFtU2luayR2YTIiLCJfdmFsaWQzIiwiX3ZhbGlkYXRpb25SZXN1bHQzIiwiaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2siLCJoYXNFbmNvZGVkU3RyZWFtU2luayIsImhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayIsInN0cmVhbVBsYXllciIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIlN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiRW5jb2RlZFN0cmVhbVNpbmsiLCJEaXNjb3ZlcnkiLCJoYW5kbGVTdHJlYW1GYWlsdXJlIiwiU3RyZWFtRmFjdG9yeSIsImZpbmFsbHkiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX2NhbGxlZTYiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJwbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJfY2FsbGVlOCIsIl9jYWxsZWU4JCIsIl9jb250ZXh0OCIsIl90aGlzNiIsImRlc3Ryb3lTdHJlYW0iLCJfcmVmMiIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiY2hhbm5lbE9wdGlvbnMiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkJpdHJhdGVTdGF0ZU1hcHBpbmciLCJjb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlIiwiYml0cmF0ZVN0YXRlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwicHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkiLCJkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiRGlzY292ZXJ5U2VydmljZSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQiLCJkZWZhdWx0VGltZW91dCIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCIsIl91cmkiLCJkaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsIkVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsInBpbmciLCJ0aW1lIiwiX2Rpc2NvdmVyeVVyaSIsImJ1aWxkRGlzY292ZXJ5VXJsIiwic2RrVmVyc2lvbiIsImFwaVZlcnNpb24iLCJfcGluZyIsIl9zdWJzY3JpYmUiLCJfcHVibGlzaCIsIl9saW1pdEJpdHJhdGUiLCJfYWRkSWNlQ2FuZGlkYXRlcyIsIl9kZXN0cm95U3RyZWFtIiwiX2Rlc3Ryb3lTdHJlYW1PblVubW91bnQiLCJfY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UiLCJfY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIl90aW1lb3V0IiwiX3JvdW5kVHJpcFRpbWUiLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsImxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uIiwiY2xpZW50VmVyc2lvbiIsImJvZHlXaXRoT2ZmZXIiLCJib2R5V2l0aG91dE9mZmVyIiwiaHR0cFJlc3BvbnNlIiwic3Vic2NyaWJlUmVzcG9uc2UiLCJidWlsZFVybCIsImJlYXJlclRva2VuIiwiaHR0cFJvdW5kVHJpcFRpbWUiLCJzZXNzaW9uRGVzY3JpcHRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbiIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb24iLCJtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSIsInB1Ymxpc2giLCJfeDUiLCJfeDYiLCJfeDciLCJtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX3g4IiwiX3g5Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwibWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMiLCJhZGRJY2VDYW5kaWRhdGVzIiwiX3gxNSIsIl94MTYiLCJfeDE3IiwiY2FuZGlkYXRlcyIsImRpc2NvdmVyeUNvbXBsZXRlZCIsImFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9hcmdzNiIsIm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDIwIiwiX3gyMSIsInNlbmRCZWFjb24iLCJwYXRoIiwicGF0aEFzQXJyYXkiLCJfeDIyIiwiX3gyMyIsImpzb24iLCJydGNDb25maWd1cmF0aW9uIiwiY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSIsImNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSIsIl94MjQiLCJfeDI1IiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJidW5kbGVQb2xpY3kiLCJpY2VDYW5kaWRhdGVQb29sU2l6ZSIsImljZVRyYW5zcG9ydFBvbGljeSIsInJ0Y3BNdXhQb2xpY3kiLCJfeDI2IiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI3IiwiX2NhbGxlZTEyIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJfeDI4IiwiX2NhbGxlZTEzIiwiX2NhbGxlZTEzJCIsIl9jb250ZXh0MTMiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsIkNodW5rZWRTdHJlYW1pbmciLCJwbGF5ZXIiLCJtb25pdG9yIiwiX21vbml0b3JEaXNwb3NhYmxlcyIsIm5ld1N0cmVhbVN0YXRpc3RpY3MiLCJfc3RyZWFtU3RhdGlzdGljcyIsImN1cnJlbnRUaW1lIiwiZGF0YUJ1ZmZlcmVkIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJwYXVzZWQiLCJfaGxzUGxheWVyIiwiX3BoZW5peFdlYlBsYXllciIsIl9zaGFrYSIsIl9vcHRpb25zIiwibG9hZGVkIiwiX3BlbmRpbmciLCJfcGxheWVyIiwiUGxheWVyIiwiZGFzaE1hbmlmZXN0VXJsTWF0Y2giLCJobHNNYW5pZmVzdFVybE1hdGNoIiwibWFuaWZlc3RVcmwiLCJwbGF5bGlzdFVybCIsIkhsc1BsYXllciIsIl9vYmplY3RTcHJlYWQiLCJwcmVmZXJOYXRpdmUiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJXZWJQbGF5ZXIiLCJTaGFrYVBsYXllciIsIm1hbmlmZXN0VVJJIiwiX3ZpZGVvRWxlbWVudCIsIl9raW5kIiwiX3N0cmVhbUlkIiwiX21hbmlmZXN0VVJJIiwiZW5jb2RlVVJJIiwicmVwbGFjZSIsImVuYWJsZVdvcmtlciIsIm1heEJ1ZmZlckxlbmd0aCIsImxpdmVCYWNrQnVmZmVyTGVuZ3RoIiwibGl2ZVN5bmNEdXJhdGlvbiIsImxpdmVEdXJhdGlvbkluZmluaXR5IiwibGl2ZU1heExhdGVuY3lEdXJhdGlvbiIsIkluZmluaXR5IiwiaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kIiwibG9hZFNvdXJjZSIsImF0dGFjaE1lZGlhIiwiY2FuUGxheVR5cGUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrU3RhdGVzIiwiTmV0d29ya05vU291cmNlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJidWZmZXJlZCIsImVuZCIsInN0cmVhbUNvbnRyb2xsZXIiLCJ0cnVlQ3VycmVudFRpbWUiLCJtYXgiLCJkZXN0cm95IiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJfYXBwbHlSdGNDb25maWd1cmF0aW9uIiwicGVlckNvbm5lY3Rpb25Db250ZXh0Iiwic3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9yZWYzIiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmMyQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwib25MaW5lIiwicmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJtZWRpYVN0cmVhbVByb21pc2UiLCJzdHJlYW1zIiwidHJhY2tMaXN0ZW5lciIsImFuc3dlciIsIl9yZWY2IiwibWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJJbnNlcnRhYmxlU3RyZWFtcyIsIl9JbnNlcnRhYmxlU3RyZWFtcyRhcCIsInRyYW5zZm9ybWVkU3RyZWFtIiwicnRjQ29ubmVjdGlvbk1vbml0b3IiLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIm9wdGlvbmFsUGVlckNvbm5lY3Rpb24iLCJuZXdSdGNDb25maWd1cmF0aW9uIiwiX3BlZXJDb25uZWN0aW9uJGN1cnJlIiwiaXNDbGllbnRPZmZlckZsb3ciLCJpY2VSZXN0YXJ0Iiwib2ZmZXIiLCJwbGF5ZXJPcHRpb25zIiwiYWJyIiwiZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlIiwibWFuaWZlc3QiLCJyZXRyeVBhcmFtZXRlcnMiLCJzdHJlYW1pbmciLCJyZWJ1ZmZlcmluZ0dvYWwiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsImVzdGltYXRlZEJhbmR3aWR0aCIsInBsYXlUaW1lIiwidW5sb2FkIiwicGxheWVyQ29uZmlnIiwiY29uZmlndXJlIiwibG9hZCIsImNvZGUiLCJjcmVhdGUiLCJ0b2tlbkNhcGFiaWxpdGllcyIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsInJlbG9hZElmQWJsZSIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwibW9kZSIsImFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uIiwicmVjZWl2ZXJzIiwiaDI2NElGcmFtZTJ4MiIsIlVpbnQ4QXJyYXkiLCJoMjY0UEZyYW1lMngyIiwidnA4SUZyYW1lMXgxIiwidnA4UEZyYW1lMXgxIiwidnA5SUZyYW1lMXgxIiwidnA5UEZyYW1lMXgxIiwib3B1c1NpbGVudCIsImludmFsaWRGcmFtZSIsInJlY2VpdmVyIiwicmVjZWl2ZSIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNodW5rIiwiY29udHJvbGxlciIsImJ1ZmZlciIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInRyYW5zZm9ybSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbiIsIk1lZGlhU3RyZWFtIiwiaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwidmlkZW9UcmFjayIsInByb2Nlc3NvciIsImdlbmVyYXRvciIsInJlbW92ZVRyYWNrIiwiYXVkaW9UcmFjayIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwidmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJfdGVsZW1ldHJ5U2VydmljZSIsIlRlbGVtZXRyeVNlcnZpY2UiLCJfc2VuZExvZ3NJZkFibGUiLCJsb2dSZWNvcmQiLCJfbG9ncyIsInNlbmRMb2dzSWZBYmxlIiwibG9nTWVzc2FnZXMiLCJudW1iZXJPZkxvZ3NUb1NlbmQiLCJzaXplT2ZMb2dzVG9TZW5kIiwiZ2V0TG9nU2l6ZSIsInN1bSIsImR1cmF0aW9uIiwiX2R1cmF0aW9uIiwiaXNOZWdhdGl2ZSIsImFicyIsIm9mZnNldCIsIm1pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzIiwiaG91cnMiLCJwYXJ0cyIsIlN0cmluZyIsInBhZFN0YXJ0IiwidGFyZ2V0TGVuZ3RoIiwicGFkU3RyaW5nIiwicmVwZWF0IiwiZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImRlZmF1bHRNYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIm1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiYmFja29mZkludGVydmFsSW5TZWNvbmRzIiwicmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZiIsInBvdyIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uIiwiZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kIiwibWluIiwib3RoZXIiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJldmVudCIsIm9uQ29udGludWF0aW9uIiwiX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciIsInB1c2hUaW1lVG9GaXJzdEZyYW1lIiwicHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJfdGltZVRvRmlyc3RGcmFtZSIsImR1cmF0aW9uU2luY2VQYWdlTG9hZCIsIl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3ZpZGVvU3RhbGxlZCIsImJ1ZmZlckxlbmd0aCIsImhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50IiwiX2xhc3RQcm9ncmVzcyIsInRpbWVTaW5jZVN0b3AiLCJuZXdSZXNvbHV0aW9uIiwiX3ZpZGVvUmVzb2x1dGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0Esb0NBQW9DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0wvRjtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSDdGLHVCQUF1QixtQkFBTyxDQUFDLHdGQUF1QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSmhHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7O0FDTnBHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsSUFBSSxPQUFPO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLG9DQUFvQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUM5Qi9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDTDdGLG9CQUFvQixtQkFBTyxDQUFDLGtGQUFvQjtBQUNoRDtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSwrQkFBK0IseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDbEIxRixvQkFBb0IsbUJBQU8sQ0FBQyxrRkFBb0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDZjdGO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRSx5QkFBeUIsU0FBUyxzQkFBeUI7QUFDaEU7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNON0YscUJBQXFCLG1CQUFPLENBQUMsb0ZBQXFCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLDRCQUE0Qix5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNqQnZGO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNIOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sWUFBWSxrRUFBa0U7QUFDckYsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQzNCbkc7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlCQUF5QixTQUFTLHNCQUF5QixrQjs7Ozs7Ozs7OztBQ0g5RjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDSGhHLGNBQWMsaUdBQWlDO0FBQy9DLDRCQUE0QixtQkFBTyxDQUFDLGtHQUE0QjtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7OztBQ1Z4RyxjQUFjLGlHQUFpQztBQUMvQztBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHNCQUF5QjtBQUNoRTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILHlCQUF5QixPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQSxzQ0FBc0MseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDL1NqRztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRSx5QkFBeUIsU0FBUyxzQkFBeUI7QUFDaEU7QUFDQTtBQUNBLGtDQUFrQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNQN0YscUJBQXFCLG1CQUFPLENBQUMsb0ZBQXFCO0FBQ2xELDJCQUEyQixtQkFBTyxDQUFDLGdHQUEyQjtBQUM5RCxpQ0FBaUMsbUJBQU8sQ0FBQyw0R0FBaUM7QUFDMUUsc0JBQXNCLG1CQUFPLENBQUMsc0ZBQXNCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNQNUYsd0JBQXdCLG1CQUFPLENBQUMsMEZBQXdCO0FBQ3hELHNCQUFzQixtQkFBTyxDQUFDLHNGQUFzQjtBQUNwRCxpQ0FBaUMsbUJBQU8sQ0FBQyw0R0FBaUM7QUFDMUUsd0JBQXdCLG1CQUFPLENBQUMsMEZBQXdCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNQaEcsY0FBYyxpR0FBaUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDWDFGLGNBQWMsaUdBQWlDO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFrQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyx5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNONUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRyxFQUFFLHlCQUF5QixTQUFTLHNCQUF5QjtBQUNoRTtBQUNBLDBCQUEwQix5QkFBeUIsU0FBUyxzQkFBeUIsa0I7Ozs7Ozs7Ozs7QUNUckYsdUJBQXVCLG1CQUFPLENBQUMsd0ZBQXVCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMseUJBQXlCLFNBQVMsc0JBQXlCLGtCOzs7Ozs7Ozs7O0FDVHpHOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxrR0FBK0I7QUFDckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEE7QUFDQTtBQUNBO0FBQzRDO0FBQ1I7QUFDZ0I7QUFDQTtBQUVwRCxJQUFNQSxtQ0FBbUMsR0FBRyxJQUFJO0FBQUMsSUFFNUJDLDBCQUEwQjtFQU83QyxTQUFBQSwyQkFBQSxFQUFjO0lBQUFDLDJJQUFBLE9BQUFELDBCQUFBO0lBQUFFLDJJQUFBLHVCQU5rQyxJQUFJQyx5REFBYyxDQUFDLENBQUM7SUFBQUQsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEsb0NBR3hCRSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQUFILDJJQUFBO0lBSXBELElBQUksQ0FBQ0ksYUFBYSxHQUFHLElBQUlDLGdEQUFPLENBQVUsSUFBSSxDQUFDO0lBQy9DLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsSUFBSUMsd0RBQWUsQ0FBQyxJQUFJLENBQUNILGFBQWEsQ0FBQztJQUNwRSxJQUFJLENBQUNJLG9CQUFvQixDQUFDLENBQUM7RUFDN0I7RUFBQ0Msd0lBQUEsQ0FBQVgsMEJBQUE7SUFBQVksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QztNQUMzQyxPQUFPLElBQUksQ0FBQ0wscUJBQXFCO0lBQ25DO0VBQUM7SUFBQUksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUMsdUJBQUEsRUFBaUM7TUFDL0IsT0FBT1gsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ1cseUJBQXlCO0lBQ3BEO0VBQUM7SUFBQUosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFKLHFCQUFBLEVBQXFDO01BQUEsSUFBQVMsS0FBQTtNQUNuQyxJQUFJQyxNQUFNO01BQ1YsSUFBSUMsZ0JBQWdCO01BRXBCLElBQUksUUFBT0MsUUFBUSxpQ0FBQUMsbUlBQUEsQ0FBUkQsUUFBUSxPQUFLLFFBQVEsRUFBRTtRQUNoQztNQUNGOztNQUVBO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBSSxPQUFPQSxRQUFRLENBQUNFLFFBQVEsS0FBSyxXQUFXLEVBQUU7UUFDNUNKLE1BQU0sR0FBRyxVQUFVO1FBQ25CQyxnQkFBZ0IsR0FBRyxvQkFBb0I7UUFDdkM7TUFDRixDQUFDLE1BQU0sSUFBSSxPQUFPQyxRQUFRLENBQUNHLFlBQVksS0FBSyxXQUFXLEVBQUU7UUFDdkRMLE1BQU0sR0FBRyxjQUFjO1FBQ3ZCQyxnQkFBZ0IsR0FBRyx3QkFBd0I7TUFDN0MsQ0FBQyxNQUFNLElBQUksT0FBT0MsUUFBUSxDQUFDRixNQUFNLEtBQUssV0FBVyxFQUFFO1FBQUU7UUFDbkRBLE1BQU0sR0FBRyxRQUFRO1FBQ2pCQyxnQkFBZ0IsR0FBRyxrQkFBa0I7TUFDdkM7TUFDQTs7TUFFQSxJQUFNSyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBLEVBQWU7UUFDekMsSUFBTUMsWUFBWSxHQUFHLENBQUNMLFFBQVEsQ0FBQ0YsTUFBTSxDQUFDO1FBRXRDRCxLQUFJLENBQUNTLGFBQWEsQ0FBQ0QsWUFBWSxDQUFDO01BQ2xDLENBQUM7TUFFRCxJQUFJLE9BQU9MLFFBQVEsQ0FBQ08sZ0JBQWdCLEtBQUssV0FBVyxJQUFJLE9BQU9QLFFBQVEsQ0FBQ0YsTUFBTSxDQUFDLEtBQUssV0FBVyxFQUFFO1FBQy9GRSxRQUFRLENBQUNPLGdCQUFnQixDQUFDUixnQkFBZ0IsRUFBRUssc0JBQXNCLEVBQUUsS0FBSyxDQUFDO1FBRTFFLElBQUksQ0FBQ1IsWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSUMscURBQVUsQ0FBQyxZQUFNO1VBQ3pDVCxRQUFRLENBQUNVLG1CQUFtQixDQUFDWCxnQkFBZ0IsRUFBRUssc0JBQXNCLEVBQUUsS0FBSyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO01BQ0wsQ0FBQyxNQUFNO1FBQ0wsSUFBSSxDQUFDTyxzQkFBc0IsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN4QztJQUNGO0VBQUM7SUFBQXRCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtQix1QkFBQSxFQUF1QztNQUFBLElBQUFFLE1BQUE7TUFDckMsSUFBSSxDQUFDQyxzQkFBc0IsR0FBR0MsTUFBTSxDQUFDQyxXQUFXLENBQUMsWUFBTTtRQUNyRCxJQUFNWCxZQUFZLEdBQUdMLFFBQVEsQ0FBQ2lCLFFBQVEsQ0FBQyxDQUFDO1FBRXhDSixNQUFJLENBQUNQLGFBQWEsQ0FBQ0QsWUFBWSxDQUFDO01BQ2xDLENBQUMsRUFBRTVCLG1DQUFtQyxDQUFDO01BRXZDLElBQUksQ0FBQ21CLFlBQVksQ0FBQ1ksR0FBRyxDQUFDLElBQUlDLHFEQUFVLENBQUMsWUFBTTtRQUN6QyxJQUFJSSxNQUFJLENBQUNDLHNCQUFzQixFQUFFO1VBQy9CSSxhQUFhLENBQUNMLE1BQUksQ0FBQ0Msc0JBQXNCLENBQUM7UUFDNUM7UUFFQUQsTUFBSSxDQUFDQyxzQkFBc0IsR0FBRyxJQUFJO01BQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBeEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWMsY0FBc0JELFlBQVksRUFBUTtNQUN4QyxJQUFJLElBQUksQ0FBQ3JCLGFBQWEsS0FBS3FCLFlBQVksRUFBRTtRQUN2QztNQUNGO01BRUEsSUFBSSxDQUFDckIsYUFBYSxDQUFDUSxLQUFLLEdBQUdhLFlBQVk7SUFDekM7RUFBQztFQUFBLE9BQUEzQiwwQkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkdIO0FBQ0E7QUFDQTtBQUZBLElBR3FCeUMsZUFBZTtFQUFBLFNBQUFBLGdCQUFBO0lBQUF4QywySUFBQSxPQUFBd0MsZUFBQTtFQUFBO0VBQUE5Qix3SUFBQSxDQUFBOEIsZUFBQTtJQUFBN0IsR0FBQTtJQUFBQyxHQUFBLEVBZWxDLFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTzRCLGVBQWUsQ0FBQ0Msc0JBQXNCO0lBQy9DO0VBQUM7SUFBQTlCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTyxJQUFJLENBQUM4QixZQUFZO0lBQzFCO0VBQUM7SUFBQS9CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUM7TUFDdkMsT0FBTyxJQUFJLENBQUMrQixvQkFBb0I7SUFDbEM7RUFBQztJQUFBaEMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPNEIsZUFBZSxDQUFDSSxXQUFXO0lBQ3BDO0VBQUM7SUFBQWpDLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ0ssV0FBVztJQUNwQztFQUFDO0lBQUFsQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU80QixlQUFlLENBQUNNLFdBQVc7SUFDcEM7RUFBQztJQUFBbkMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPNEIsZUFBZSxDQUFDTyxXQUFXO0lBQ3BDO0VBQUM7SUFBQXBDLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ1EsV0FBVztJQUNwQztFQUFDO0lBQUFyQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU80QixlQUFlLENBQUNTLFdBQVc7SUFDcEM7RUFBQztJQUFBdEMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPNEIsZUFBZSxDQUFDVSxXQUFXO0lBQ3BDO0VBQUM7SUFBQXZDLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTzRCLGVBQWUsQ0FBQ1csV0FBVztJQUNwQztFQUFDO0lBQUF4QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdUMsU0FBQSxFQUEyQjtNQUFBLElBQUFDLFVBQUE7TUFDekIsT0FBUSxpREFBaUQsQ0FBRUMsSUFBSSxFQUFBRCxVQUFBLEdBQUNFLFNBQVMsY0FBQUYsVUFBQSx1QkFBVEEsVUFBQSxDQUFXRyxTQUFTLENBQUM7SUFDdkY7RUFBQztJQUFBN0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRDLDJCQUFBLEVBQW9EO01BQ2xELElBQUksQ0FBQ0YsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ0MsU0FBUyxFQUFFO1FBQ3RDLE9BQU8sRUFBRTtNQUNYO01BRUEsSUFBTUUscUJBQXFCLEdBQUdILFNBQVMsQ0FBQ0MsU0FBUyxDQUFDRyxLQUFLLENBQUNuQixlQUFlLENBQUNvQiwyQkFBMkIsQ0FBQztNQUVwRyxJQUFJRixxQkFBcUIsSUFBSUEscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsT0FBT0EscUJBQXFCLENBQUMsQ0FBQyxDQUFDO01BQ2pDO01BRUEsT0FBT2xCLGVBQWUsQ0FBQ3FCLCtCQUErQixDQUFDLENBQUM7SUFDMUQ7RUFBQztJQUFBbEQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWlELGlCQUFBLEVBQTBDO01BQ3hDLElBQUksQ0FBQ3RCLGVBQWUsQ0FBQ0Msc0JBQXNCLEVBQUU7UUFDM0MsT0FBTyxFQUFFO01BQ1g7TUFFQSxJQUFNc0IsZUFBZSxHQUFHdkIsZUFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VCLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFFekUsSUFBSSxDQUFDRCxlQUFlLElBQUksQ0FBQ0EsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNDLE9BQU8sRUFBRTtNQUNYO01BRUEsT0FBT0EsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMzQjtFQUFDO0lBQUFwRCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb0QseUJBQUEsRUFBa0Q7TUFDaEQsSUFBSSxDQUFDekIsZUFBZSxDQUFDQyxzQkFBc0IsRUFBRTtRQUMzQyxPQUFPLENBQUM7TUFDVjtNQUVBLElBQU15QixrQkFBa0IsR0FBRzFCLGVBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QixLQUFLLENBQUMsR0FBRyxDQUFDO01BRTVFLElBQUksQ0FBQ0Usa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakQsT0FBTyxDQUFDO01BQ1Y7TUFFQSxJQUFNQyxXQUFXLEdBQUdELGtCQUFrQixDQUFDLENBQUMsQ0FBQztNQUV6QyxJQUFJLENBQUNDLFdBQVcsRUFBRTtRQUNoQixPQUFPLENBQUM7TUFDVjtNQUVBLE9BQU9DLE1BQU0sQ0FBQ0QsV0FBVyxDQUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DO0VBQUM7SUFBQXJELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnRCxnQ0FBQSxFQUF5RDtNQUN2RCxJQUFJLENBQUNOLFNBQVMsSUFBSSxDQUFDQSxTQUFTLENBQUNDLFNBQVMsRUFBRTtRQUN0QyxPQUFPLEVBQUU7TUFDWDtNQUVBLElBQU1BLFNBQVMsR0FBR0QsU0FBUyxDQUFDQyxTQUFTO01BQ3JDLElBQU1hLElBQUksR0FBR2IsU0FBUyxDQUFDYyxPQUFPLENBQUMsT0FBTyxDQUFDO01BRXZDLElBQUlELElBQUksR0FBRyxDQUFDLEVBQUU7UUFDWjtRQUNBLGFBQUFFLE1BQUEsQ0FBYUMsUUFBUSxDQUFDaEIsU0FBUyxDQUFDaUIsU0FBUyxDQUFDSixJQUFJLEdBQUcsQ0FBQyxFQUFFYixTQUFTLENBQUNjLE9BQU8sQ0FBQyxHQUFHLEVBQUVELElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3hGO01BRUEsSUFBTUssT0FBTyxHQUFHbEIsU0FBUyxDQUFDYyxPQUFPLENBQUMsVUFBVSxDQUFDO01BRTdDLElBQUlJLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDZjtRQUNBLElBQU1DLE9BQU8sR0FBR25CLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUV4QyxhQUFBQyxNQUFBLENBQWFDLFFBQVEsQ0FBQ2hCLFNBQVMsQ0FBQ2lCLFNBQVMsQ0FBQ0UsT0FBTyxHQUFHLENBQUMsRUFBRW5CLFNBQVMsQ0FBQ2MsT0FBTyxDQUFDLEdBQUcsRUFBRUssT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDOUY7TUFFQSxPQUFPLEVBQUU7SUFDWDtFQUFDO0VBQUEsT0FBQW5DLGVBQUE7QUFBQTtBQUFBb0MsTUFBQSxHQXRJa0JwQyxlQUFlO0FBQUF2QywySUFBQSxDQUFmdUMsZUFBZSxpQ0FDb0IsNEpBQTRKO0FBQUF2QywySUFBQSxDQUQvTHVDLGVBQWUsNEJBRWVBLE1BQWUsQ0FBQ2lCLDBCQUEwQixDQUFDLENBQUM7QUFBQXhELDJJQUFBLENBRjFFdUMsZUFBZSxrQkFHS0EsTUFBZSxDQUFDc0IsZ0JBQWdCLENBQUMsQ0FBQztBQUFBN0QsMklBQUEsQ0FIdER1QyxlQUFlLDBCQUlhQSxNQUFlLENBQUN5Qix3QkFBd0IsQ0FBQyxDQUFDO0FBQUFoRSwySUFBQSxDQUp0RXVDLGVBQWUsaUJBTUlBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQU5oRnVDLGVBQWUsaUJBT0lBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVBoRnVDLGVBQWUsaUJBUUlBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVJoRnVDLGVBQWUsaUJBU0lBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVRoRnVDLGVBQWUsaUJBVUlBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVZoRnVDLGVBQWUsaUJBV0lBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVhoRnVDLGVBQWUsaUJBWUlBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE1RSwySUFBQSxDQVpoRnVDLGVBQWUsaUJBYUlBLE1BQWUsQ0FBQ0Msc0JBQXNCLENBQUNvQyxRQUFRLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEJyRztBQUNBO0FBQ0E7QUFDMkQ7QUFDVztBQUNOO0FBQ1Y7QUFBQSxJQUVqQ0MsNEJBQTRCO0VBQUEsU0FBQUEsNkJBQUE7SUFBQTlFLDJJQUFBLE9BQUE4RSw0QkFBQTtFQUFBO0VBQUFwRSx3SUFBQSxDQUFBb0UsNEJBQUE7SUFBQW5FLEdBQUE7SUFBQUUsS0FBQSxFQUMvQyxTQUFBa0UsZUFBZUMsSUFBWSxFQUFVO01BQ25DLE9BQU8sSUFBSSxDQUFDQywrQkFBK0IsQ0FBQ0QsSUFBSSxDQUFDLElBQy9DLElBQUksQ0FBQ0Usa0NBQWtDLElBQUFYLE1BQUEsQ0FBSVMsSUFBSSx3QkFBcUIsQ0FBQyxJQUNyRSxJQUFJLENBQUNHLGtCQUFrQixDQUFDSCxJQUFJLENBQUM7SUFDakM7RUFBQztJQUFBckUsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXVFLGdCQUFnQkosSUFBWSxFQUFXO01BQ3JDLElBQU1uRSxLQUFLLEdBQUcsSUFBSSxDQUFDb0UsK0JBQStCLENBQUNELElBQUksQ0FBQztNQUV4RCxJQUFJbkUsS0FBSyxFQUFFO1FBQ1QsT0FBT0EsS0FBSyxLQUFLLE1BQU0sSUFBSUEsS0FBSyxLQUFLLEdBQUcsSUFBSUEsS0FBSyxLQUFLLElBQUk7TUFDNUQ7TUFFQSxJQUFNd0UsWUFBWSxHQUFHLElBQUksQ0FBQ0gsa0NBQWtDLElBQUFYLE1BQUEsQ0FBSVMsSUFBSSx3QkFBcUIsQ0FBQztNQUUxRixJQUFJSyxZQUFZLEVBQUU7UUFDaEIsT0FBT0EsWUFBWSxLQUFLLE1BQU0sSUFBSUEsWUFBWSxLQUFLLEdBQUcsSUFBSUEsWUFBWSxLQUFLLElBQUk7TUFDakY7TUFFQSxPQUFPLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNOLElBQUksQ0FBQyxLQUFLLElBQUk7SUFDaEQ7RUFBQztJQUFBckUsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0RDtNQUMxRCxPQUFPO1FBQ0wsc0JBQXNCLEVBQUUyRSw4R0FBK0QsQ0FBQ0Msb0ZBQXNDLENBQUM7UUFDL0gsc0JBQXNCLEVBQUVDLHNHQUF5RCxDQUFDQywrRUFBa0MsQ0FBQztRQUNySCw4QkFBOEIsRUFBRUQsc0dBQXlELENBQUNDLHNGQUF5QyxDQUFDO1FBQ3BJLGdDQUFnQyxFQUFFRCxzR0FBeUQsQ0FBQ0Msd0ZBQTJDLENBQUM7UUFDeEksc0JBQXNCLEVBQUUsRUFBRTtRQUMxQixZQUFZLEVBQUUsRUFBRTtRQUNoQixpQkFBaUIsRUFBRTtNQUNyQixDQUFDO0lBQ0g7RUFBQztJQUFBL0UsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUErRDtNQUM3RCxPQUFPO1FBQ0wsdUNBQXVDLEVBQUUsSUFBSTtRQUM3QyxnREFBZ0QsRUFBRSxJQUFJO1FBQ3RELDRDQUE0QyxFQUFFLElBQUk7UUFDbEQsa0RBQWtELEVBQUU7TUFDdEQsQ0FBQztJQUNIO0VBQUM7SUFBQUQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9FLGdDQUF3Q0QsSUFBWSxFQUFVO01BQzVELElBQU1XLFNBQVMsR0FBR3RFLFFBQVEsQ0FBQ3VFLGFBQWEsZUFBQXJCLE1BQUEsQ0FBZVMsSUFBSSxPQUFJLENBQUM7TUFFaEUsSUFBSSxDQUFDVyxTQUFTLEVBQUU7UUFDZDtNQUNGO01BRUEsSUFBTTlFLEtBQUssR0FBRzhFLFNBQVMsQ0FBQ0UsWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUU3QyxJQUFJLENBQUNoRixLQUFLLEVBQUU7UUFDVjtNQUNGO01BRUEsT0FBT0EsS0FBSztJQUNkO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFFLG1DQUEyQ0YsSUFBWSxFQUFVO01BQy9ELElBQU1jLHFCQUFxQixHQUFHLElBQUksQ0FBQ2IsK0JBQStCLENBQUNELElBQUksQ0FBQztNQUV4RSxJQUFJLENBQUNjLHFCQUFxQixFQUFFO1FBQzFCO01BQ0Y7TUFFQSxJQUFNakYsS0FBSyxHQUFHLElBQUlrRixlQUFlLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLENBQUNyRixHQUFHLENBQUNrRixxQkFBcUIsQ0FBQyxJQUFJSSxTQUFTO01BRTFGLElBQUksQ0FBQ3JGLEtBQUssRUFBRTtRQUNWO01BQ0Y7TUFFQSxPQUFPQSxLQUFLO0lBQ2Q7RUFBQztFQUFBLE9BQUFpRSw0QkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEZIO0FBQ0E7QUFDQTtBQUNpRTtBQUFBLElBRTVDcUIsdUJBQXVCO0VBOEIxQyxTQUFBQSx3QkFBQSxFQUFzQjtJQUFBbkcsMklBQUEsT0FBQW1HLHVCQUFBO0lBQ3BCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHdFQUF3RSxDQUFDO0VBQzNGO0VBQUMxRix3SUFBQSxDQUFBeUYsdUJBQUE7SUFBQXhGLEdBQUE7SUFBQUUsS0FBQSxFQS9CRCxTQUFBd0YsdUJBQUEsRUFBc0M7TUFDcEMsSUFBSUMsMkdBQXlELEVBQUU7UUFDN0QsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQyxDQUFDO01BQ3JDO0lBQ0Y7RUFBQztJQUFBNUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBGLDZCQUFBLEVBQW9EO01BQUEsSUFBQXJGLEtBQUE7TUFDbEQsSUFBSW9GLDZGQUEyQyxFQUFFO1FBQy9DRSxjQUFjLENBQUMsWUFBTTtVQUNuQnRGLEtBQUksQ0FBQ3VGLHVDQUF1QyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNO1FBQ0xDLFVBQVUsQ0FBQyxZQUFNO1VBQ2Z4RixLQUFJLENBQUN1Rix1Q0FBdUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztNQUNKO0lBQ0Y7RUFBQztJQUFBOUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRGLHdDQUFBLEVBQStEO01BQzdELElBQUlFLEdBQUcsR0FBR3RGLFFBQVEsQ0FBQ3VGLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFFdkNELEdBQUcsQ0FBQ0UsR0FBRyxHQUFHekUsTUFBTSxDQUFDMEUsR0FBRyxDQUFDQyxlQUFlLENBQUMsSUFBSUMsSUFBSSxDQUFDLENBQUMsSUFBSUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDMUVOLEdBQUcsQ0FBQ08sT0FBTyxHQUFHLFlBQVc7UUFDdkI5RSxNQUFNLENBQUMwRSxHQUFHLENBQUNLLGVBQWUsQ0FBQyxJQUFJLENBQUNOLEdBQUcsQ0FBQztRQUVwQ0YsR0FBRyxHQUFHLElBQUk7TUFDWixDQUFDO0lBQ0g7RUFBQztFQUFBLE9BQUFSLHVCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pDSDtBQUNBO0FBQ0E7O0FBRzRDO0FBQ1I7QUFDZ0I7QUFBQSxJQUUvQmlCLGNBQWM7RUFPakMsU0FBQUEsZUFBQSxFQUFjO0lBQUFwSCwySUFBQSxPQUFBb0gsY0FBQTtJQUFBbkgsMklBQUEsdUJBTmtDLElBQUlDLHlEQUFjLENBQUMsQ0FBQztJQUFBRCwySUFBQSx1QkFDcENzRCxTQUFTLElBQUlBLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFBQXRELDJJQUFBLGVBQzNCLElBQUlLLGdEQUFPLENBQUM0RixTQUFTLENBQUM7SUFBQWpHLDJJQUFBLHlCQUNaLElBQUlLLGdEQUFPLENBQUM0RixTQUFTLENBQUM7SUFBQWpHLDJJQUFBLHNDQUNULElBQUlLLGdEQUFPLENBQUM0RixTQUFTLENBQUM7SUFHcEYsSUFBSSxDQUFDLElBQUksQ0FBQ21CLFdBQVcsRUFBRTtNQUNyQjtJQUNGO0lBRUEsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztFQUN6QjtFQUFDN0csd0lBQUEsQ0FBQTBHLGNBQUE7SUFBQXpHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUM0RyxZQUFZO0lBQzFCO0VBQUM7SUFBQTdHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUM2RyxJQUFJO0lBQ2xCO0VBQUM7SUFBQTlHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUM7TUFDbkMsT0FBTyxJQUFJLENBQUM4RyxjQUFjO0lBQzVCO0VBQUM7SUFBQS9HLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUMrRywyQkFBMkI7SUFDekM7RUFBQztJQUFBaEgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxPQUFPLENBQUMsQ0FBQztJQUM3QjtFQUFDO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErRyw4QkFBQSxFQUFnRDtNQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDUCxXQUFXLEVBQUU7UUFDckIsT0FBTyxDQUFDLENBQUM7TUFDWDtNQUVBLE9BQU85RCxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUNzRSxRQUFRLElBQUl0RSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUN1RSxXQUFXO0lBQ2hGO0VBQUM7SUFBQW5ILEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFrSCxpQkFBQSxFQUFtQztNQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDVixXQUFXLEVBQUU7UUFDckIsT0FBTyxTQUFTO01BQ2xCO01BRUEsT0FBTzlELFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQ3lFLGFBQWEsSUFBSXpFLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQzBFLElBQUk7SUFDOUU7RUFBQztJQUFBdEgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFILGlCQUFBLEVBQW1DO01BQ2pDLE9BQU8zRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM0RSxHQUFHO0lBQ3BDO0VBQUM7SUFBQXhILEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5Ryw0QkFBQSxFQUE0QztNQUFBLElBQUFwRyxLQUFBO01BQzFDLElBQU1rSCxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBQSxFQUFlO1FBQzNCbEgsS0FBSSxDQUFDcUcsZ0JBQWdCLENBQUMsQ0FBQztNQUN6QixDQUFDO01BRURoRSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMzQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUV3RyxRQUFRLENBQUM7TUFFNUQsSUFBSSxDQUFDbkgsWUFBWSxDQUFDWSxHQUFHLENBQUMsSUFBSUMscURBQVUsQ0FBQyxZQUFNO1FBQ3pDeUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDeEIsbUJBQW1CLENBQUMsUUFBUSxFQUFFcUcsUUFBUSxDQUFDO01BQ2pFLENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBekgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBHLGlCQUFBLEVBQWlDO01BQy9CLElBQUksQ0FBQ0UsSUFBSSxDQUFDNUcsS0FBSyxHQUFHLElBQUksQ0FBQ3FILGdCQUFnQixDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDUixjQUFjLENBQUM3RyxLQUFLLEdBQUcsSUFBSSxDQUFDa0gsZ0JBQWdCLENBQUMsQ0FBQztNQUNuRCxJQUFJLENBQUNKLDJCQUEyQixDQUFDOUcsS0FBSyxHQUFHLElBQUksQ0FBQytHLDZCQUE2QixDQUFDLENBQUM7SUFDL0U7RUFBQztFQUFBLE9BQUFSLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRkg7QUFDQTtBQUNBO0FBQ2lEO0FBQ0Y7QUFDTjtBQUVaO0FBQ3VCO0FBRTdDLElBQU1pQixtQkFBbUI7RUFPOUIsU0FBQUEsb0JBQVlDLFlBQW9CLEVBQUU7SUFBQXRJLDJJQUFBLE9BQUFxSSxtQkFBQTtJQUFBcEksMklBQUEsa0JBTkVzSSxvRUFBdUIsQ0FBQyxxQkFBcUIsQ0FBQztJQUFBdEksMklBQUEseUJBQ2hEdUksNERBQWtCO0lBQUF2SSwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQSwyQkFHekIsS0FBSztJQUc5QixJQUFJLENBQUN3SSxVQUFVLEdBQUd0SSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksQ0FBQ3NJLGFBQWEsR0FBR0osWUFBWTtFQUNuQztFQUFDNUgsd0lBQUEsQ0FBQTJILG1CQUFBO0lBQUExSCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOEgsUUFBUUMsUUFBUSxFQUFRO01BQ3RCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNDLHdFQUEwQixFQUFFRixRQUFRLENBQUM7SUFDL0Q7RUFBQztJQUFBakksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWtJLEtBQUEsRUFBYTtNQUNYLElBQUksQ0FBQ0Ysa0JBQWtCLENBQUNDLHFFQUF1QixDQUFDO0lBQ2xEO0VBQUM7SUFBQW5JLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnSSxtQkFBMkJHLFVBQXVCLEVBQUVKLFFBQWlCLEVBQVE7TUFDM0UsSUFBSSxJQUFJLENBQUNLLGdCQUFnQixFQUFFO1FBQ3pCO01BQ0Y7TUFFQSxJQUFJLENBQUNBLGdCQUFnQixHQUFHLElBQUk7TUFFNUIsSUFBTTdJLEdBQUcsR0FBR0QsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUN0QixJQUFNOEksU0FBUyxHQUFHOUksR0FBRyxHQUFHLElBQUksQ0FBQ3FJLFVBQVU7TUFDdkMsSUFBTVUsVUFBVSxHQUFHLElBQUlDLHdEQUFVLENBQUNKLFVBQVUsQ0FBQyxDQUFDSyxPQUFPLENBQUMsQ0FBQztNQUV2RCxJQUFJLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDO1FBQ3ZCUCxVQUFVLEVBQVZBLFVBQVU7UUFDVlEsT0FBTyxFQUFFLENBQUNwSixHQUFHLEdBQUcsSUFBSSxDQUFDc0ksYUFBYSxJQUFJLElBQUk7UUFDMUM3SCxLQUFLLEVBQUU7VUFBQzRJLE1BQU0sRUFBRVA7UUFBUyxDQUFDO1FBQzFCTixRQUFRLEVBQVJBO01BQ0YsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDYyxPQUFPLENBQUNDLElBQUksQ0FDZixzQ0FBc0MsRUFDdEMsSUFBSUMsbURBQVMsQ0FBQ3hKLEdBQUcsR0FBRyxJQUFJLENBQUNzSSxhQUFhLENBQUMsQ0FBQ21CLFdBQVcsQ0FBQyxDQUFDLEVBQ3JEakIsUUFBUSxFQUNSTyxVQUFVLEVBQ1YsSUFBSVMsbURBQVMsQ0FBQ1YsU0FBUyxDQUFDLENBQUNXLFdBQVcsQ0FBQyxDQUN2QyxDQUFDO0lBQ0g7RUFBQztFQUFBLE9BQUF4QixtQkFBQTtBQUFBLEk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2REg7QUFDQTtBQUNBO0FBQ29EO0FBRWhCO0FBR3BDLElBQU15QixtQkFBbUIsR0FBRyxTQUFTO0FBQUMsSUFFakJDLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUEvSiwySUFBQSxPQUFBK0osY0FBQTtFQUFBO0VBQUFySix3SUFBQSxDQUFBcUosY0FBQTtJQUFBcEosR0FBQTtJQUFBRSxLQUFBLEVBR2pDLFNBQUFtSixXQUFrQkMsS0FBdUIsRUFBYTtNQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7UUFDeENGLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVGLEtBQUssQ0FBQztRQUU5RCxPQUFPLElBQUlHLCtDQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO01BRUEsSUFBSTtRQUNGLElBQU1DLFlBQVksR0FBR0MsSUFBSSxDQUFDTCxLQUFLLENBQUNNLE1BQU0sQ0FBQ1QsbUJBQW1CLENBQUNVLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQU1DLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLFlBQVksQ0FBQztRQUUxQ0ksU0FBUyxDQUFDUixLQUFLLEdBQUdTLElBQUksQ0FBQ0MsS0FBSyxDQUFDRixTQUFTLENBQUNSLEtBQUssQ0FBQztRQUU3QyxPQUFPLElBQUlHLCtDQUFTLENBQUNLLFNBQVMsQ0FBQztNQUNqQyxDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO1FBQ1ZiLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMsMEJBQTBCLEVBQUVTLENBQUMsQ0FBQztRQUUzRCxPQUFPLElBQUlSLCtDQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO0lBQ0Y7RUFBQztJQUFBekosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFKLHdCQUErQkQsS0FBdUIsRUFBVztNQUMvRCxPQUFPLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLENBQUNZLFVBQVUsQ0FBQ2YsbUJBQW1CLENBQUM7SUFDekQ7RUFBQztFQUFBLE9BQUFDLGNBQUE7QUFBQTtBQUFBOUosMklBQUEsQ0ExQmtCOEosY0FBYyxhQUNDeEIsb0VBQXVCLENBQUMsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1g3RTtBQUNBO0FBQ0E7QUFGQSxJQWFxQjZCLFNBQVM7RUFJNUIsU0FBQUEsVUFBWUssU0FBcUIsRUFBRTtJQUFBLElBQUFLLGdCQUFBLEVBQUFDLGlCQUFBO0lBQUEvSywySUFBQSxPQUFBb0ssU0FBQTtJQUFBbkssMklBQUE7SUFBQUEsMklBQUE7SUFDakMsSUFBSSxDQUFDK0ssY0FBYyxHQUFHLENBQUFQLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFUSxhQUFhLEtBQUksRUFBRTtJQUNwRCxJQUFJLENBQUNDLE1BQU0sR0FBRztNQUNaQyxHQUFHLEVBQUVWLFNBQVMsYUFBVEEsU0FBUyxnQkFBQUssZ0JBQUEsR0FBVEwsU0FBUyxDQUFFUixLQUFLLGNBQUFhLGdCQUFBLGVBQWhCQSxnQkFBQSxDQUFrQkssR0FBRyxHQUFHLElBQUlyRSxHQUFHLENBQUMyRCxTQUFTLENBQUNSLEtBQUssQ0FBQ2tCLEdBQUcsQ0FBQyxHQUFHLElBQUk7TUFDaEVDLFlBQVksRUFBRSxDQUFBWCxTQUFTLGFBQVRBLFNBQVMsd0JBQUFNLGlCQUFBLEdBQVROLFNBQVMsQ0FBRVIsS0FBSyxjQUFBYyxpQkFBQSx1QkFBaEJBLGlCQUFBLENBQWtCSyxZQUFZLEtBQUk7SUFDbEQsQ0FBQztFQUNIO0VBQUMxSyx3SUFBQSxDQUFBMEosU0FBQTtJQUFBekosR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQjtNQUNwQixPQUFPLElBQUksQ0FBQ3NLLE1BQU0sQ0FBQ0MsR0FBRztJQUN4QjtFQUFDO0lBQUF4SyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDc0ssTUFBTSxDQUFDRSxZQUFZO0lBQ2pDO0VBQUM7SUFBQXpLLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUNvSyxjQUFjO0lBQzVCO0VBQUM7RUFBQSxPQUFBWixTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25DSDtBQUNBO0FBQ0E7QUFGQSxJQWFxQmlCLGFBQWE7RUFBQSxTQUFBQSxjQUFBO0lBQUFyTCwySUFBQSxPQUFBcUwsYUFBQTtFQUFBO0VBQUEzSyx3SUFBQSxDQUFBMkssYUFBQTtJQUFBMUssR0FBQTtJQUFBQyxHQUFBLEVBTWhDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEMsT0FBTyxJQUFJLENBQUMwSyxvQkFBb0I7SUFDbEM7RUFBQztJQUFBM0ssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQzJLLFNBQVM7SUFDdkI7RUFBQztJQUFBNUssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QztNQUMzQyxPQUFPLElBQUksQ0FBQzRLLFlBQVk7SUFDMUI7RUFBQztJQUFBN0ssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPLElBQUksQ0FBQzZLLGFBQWE7SUFDM0I7RUFBQztJQUFBOUssR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZLLGNBQUEsRUFBNkI7TUFDM0IsSUFBSTtRQUNGLElBQU1DLFFBQVEsR0FBR0Msc0ZBQVk7UUFFN0IsSUFBSSxDQUFDTixvQkFBb0IsR0FBRyxxQkFBcUIsSUFBSUssUUFBUSxHQUFHQSxRQUFRLENBQUNFLG1CQUFtQixHQUFHLElBQUk7UUFDbkcsSUFBSSxDQUFDTixTQUFTLEdBQUcsVUFBVSxJQUFJSSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0csUUFBUSxHQUFHLEtBQUs7UUFDbkUsSUFBSSxDQUFDTixZQUFZLEdBQUcsYUFBYSxJQUFJRyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ksV0FBVyxHQUFHLEtBQUs7UUFDNUUsSUFBSSxDQUFDTixhQUFhLEdBQUcsY0FBYyxJQUFJRSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ssWUFBWSxHQUFHLEtBQUs7TUFDakYsQ0FBQyxDQUFDLE9BQU9wQixDQUFDLEVBQUU7UUFDVixJQUFJLENBQUNVLG9CQUFvQixHQUFHLElBQUk7UUFDaEMsSUFBSSxDQUFDQyxTQUFTLEdBQUcsS0FBSztRQUN0QixJQUFJLENBQUNDLFlBQVksR0FBRyxLQUFLO1FBQ3pCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLEtBQUs7TUFDNUI7SUFDRjtFQUFDO0VBQUEsT0FBQUosYUFBQTtBQUFBO0FBQUFwTCwySUFBQSxDQXBDa0JvTCxhQUFhO0FBQUFwTCwySUFBQSxDQUFib0wsYUFBYTtBQUFBcEwsMklBQUEsQ0FBYm9MLGFBQWE7QUFBQXBMLDJJQUFBLENBQWJvTCxhQUFhO0FBQUE7QUF1Q2xDQSxhQUFhLENBQUNLLGFBQWEsQ0FBQyxDQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BEN0I7QUFDQTtBQUNBO0FBQ3FEO0FBQUEsSUFFaENwRixpQkFBaUI7RUFBQSxTQUFBQSxrQkFBQTtJQUFBdEcsMklBQUEsT0FBQXNHLGlCQUFBO0VBQUE7RUFBQTVGLHdJQUFBLENBQUE0RixpQkFBQTtJQUFBM0YsR0FBQTtJQUFBQyxHQUFBLEVBQ3BDLFNBQUFBLElBQUEsRUFBMEM7TUFDeEM7TUFDQSxPQUFPNEIsb0VBQTBCLElBQy9CQSxvRUFBMEIsSUFDMUJBLG9FQUEwQixJQUMxQkEsb0VBQTBCO0lBQzlCO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUM7TUFDQSxPQUFPNEIsb0VBQTBCLElBQy9CQSxvRUFBMEIsSUFDMUJBLG9FQUEwQixJQUMxQkEsb0VBQTBCO0lBQzlCO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTzRCLHFFQUEyQixLQUFLLFFBQVEsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUM5RjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXFEO01BQ25ELE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUU7SUFDOUY7RUFBQztJQUFBN0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPNEIscUVBQTJCLEtBQUssU0FBUyxJQUFJQSw2RUFBbUMsSUFBSSxFQUFFO0lBQy9GO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUM7TUFDdkMsT0FBTzRCLHFFQUEyQixLQUFLLFFBQVEsSUFDN0NBLHFFQUEyQixLQUFLLGdCQUFnQjtJQUNwRDtFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBDO01BQ3hDLE9BQU80QixxRUFBMkIsS0FBSyxJQUFJO0lBQzdDO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEQ7TUFBQSxJQUFBcUwsU0FBQTtNQUM1RCxPQUFPekoscUVBQTJCLEtBQUssUUFBUSxJQUFJLFNBQUF5SixTQUFBLEdBQU81SyxRQUFRLGNBQUE0SyxTQUFBLHVCQUFSQSxTQUFBLENBQVVyRixhQUFhLE1BQUssVUFBVTtJQUNsRztFQUFDO0lBQUFqRyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU80QixxRUFBMkIsS0FBSyxRQUFRLElBQUlBLDZFQUFtQyxJQUFJLEVBQUUsSUFDMUZBLHFFQUEyQixLQUFLLFNBQVMsSUFBSUEsNkVBQW1DLElBQUksRUFBRSxJQUN0RkEscUVBQTJCLEtBQUssUUFBUTtJQUM1QztFQUFDO0lBQUE3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQStCO01BQzdCLE9BQU80QixrRUFBd0IsQ0FBQyxDQUFDO0lBQ25DO0VBQUM7SUFBQTdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTyxFQUFFLE9BQU9zTCx5QkFBeUIsS0FBSyxXQUFXLElBQ3ZELE9BQU9DLHlCQUF5QixLQUFLLFdBQVcsQ0FBQztJQUNyRDtFQUFDO0lBQUF4TCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBEO01BQUEsSUFBQXdMLGVBQUEsRUFBQUMscUJBQUE7TUFDeEQsT0FBTyxTQUFBRCxlQUFBLEdBQU9FLGNBQWMsY0FBQUYsZUFBQSx3QkFBQUMscUJBQUEsR0FBZEQsZUFBQSxDQUFnQkcsU0FBUyxjQUFBRixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCRyxvQkFBb0IsTUFBSyxXQUFXO0lBQy9FO0VBQUM7RUFBQSxPQUFBbEcsaUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVIO0FBQ0E7QUFDQTtBQUZBLElBV3FCbUcsVUFBVTtFQUFBLFNBQUFBLFdBQUE7SUFBQXpNLDJJQUFBLE9BQUF5TSxVQUFBO0VBQUE7RUFBQS9MLHdJQUFBLENBQUErTCxVQUFBO0lBQUE5TCxHQUFBO0lBQUFDLEdBQUEsRUFHN0IsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQzhMLG9CQUFvQjtJQUNsQztFQUFDO0lBQUEvTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOEwsZ0JBQUEsRUFBK0I7TUFDN0IsSUFBSTtRQUNGLElBQU1DLFVBQVUsR0FBR0MsMkNBQWM7UUFFakMsSUFBSSxDQUFDSCxvQkFBb0IsR0FBRyxXQUFXLElBQUlFLFVBQVUsR0FBR0EsVUFBVSxDQUFDRSxTQUFTLEdBQUc7VUFBQ0MsVUFBVSxFQUFFO1FBQUUsQ0FBQztNQUNqRyxDQUFDLENBQUMsT0FBT25DLENBQUMsRUFBRTtRQUNWLElBQUksQ0FBQzhCLG9CQUFvQixHQUFHO1VBQUNLLFVBQVUsRUFBRTtRQUFFLENBQUM7TUFDOUM7SUFDRjtFQUFDO0VBQUEsT0FBQU4sVUFBQTtBQUFBO0FBQUF4TSwySUFBQSxDQWZrQndNLFVBQVU7QUFBQTtBQWtCL0JBLFVBQVUsQ0FBQ0UsZUFBZSxDQUFDLENBQUMsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3QjVCO0FBQ0E7QUFDQTtBQUZBLElBS3FCN0ssVUFBVTtFQUk3QixTQUFBQSxXQUFZa0wsVUFBc0IsRUFBRTtJQUFBaE4sMklBQUEsT0FBQThCLFVBQUE7SUFBQTdCLDJJQUFBO0lBQUFBLDJJQUFBO0lBQ2xDLElBQUksQ0FBQ2dOLFNBQVMsR0FBRyxLQUFLO0lBQ3RCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixVQUFVO0VBQy9CO0VBQUN0TSx3SUFBQSxDQUFBb0IsVUFBQTtJQUFBbkIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksSUFBSSxDQUFDaU0sU0FBUyxFQUFFO1FBQ2xCO01BQ0Y7TUFFQSxJQUFJLENBQUNBLFNBQVMsR0FBRyxJQUFJO01BRXJCLE9BQU8sSUFBSSxDQUFDQyxXQUFXLENBQUNqTCxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7RUFBQSxPQUFBSCxVQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCSDtBQUNBO0FBQ0E7QUFGQSxJQUtxQjVCLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFGLDJJQUFBLE9BQUFFLGNBQUE7SUFBQUQsMklBQUEsZ0JBQ08sRUFBRTtFQUFBO0VBQUFTLHdJQUFBLENBQUFSLGNBQUE7SUFBQVMsR0FBQTtJQUFBRSxLQUFBLEVBRTFDLFNBQUFnQixJQUFJbUwsVUFBdUIsRUFBUTtNQUNqQyxJQUFJLENBQUNHLEtBQUssQ0FBQzVELElBQUksQ0FBQ3lELFVBQVUsQ0FBQztJQUM3QjtFQUFDO0lBQUFyTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQWdCO01BQ2QsSUFBSSxDQUFDbU0sS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQUosVUFBVTtRQUFBLE9BQUlBLFVBQVUsQ0FBQ2hNLE9BQU8sQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN0RCxJQUFJLENBQUNtTSxLQUFLLENBQUMzQyxNQUFNLEdBQUcsQ0FBQztJQUN2QjtFQUFDO0lBQUE3SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd00sU0FBQSxFQUFtQjtNQUNqQixxQ0FBQTlJLE1BQUEsQ0FBcUMsSUFBSSxDQUFDNEksS0FBSyxDQUFDM0MsTUFBTTtJQUN4RDtFQUFDO0VBQUEsT0FBQXRLLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkJIO0FBQ0E7QUFDQTtBQUZBLElBR3FCb04sT0FBTztFQWExQixTQUFBQSxRQUFBLEVBQXNCO0lBQUF0TiwySUFBQSxPQUFBc04sT0FBQTtJQUNwQixNQUFNLElBQUlsSCxLQUFLLENBQUMsd0RBQXdELENBQUM7RUFDM0U7RUFBQzFGLHdJQUFBLENBQUE0TSxPQUFBO0lBQUEzTSxHQUFBO0lBQUFFLEtBQUEsRUFkRCxTQUFBME0sT0FBYy9DLE1BQWMsRUFBVTtNQUNwQyxJQUFNZ0Qsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFpQjtRQUN2QyxPQUFPQyxJQUFJLENBQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUNGLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzVJLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3BELENBQUM7TUFFRCxJQUFNaUosS0FBYSxHQUFHRCxJQUFJLENBQUNFLElBQUksQ0FBQ25ELE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFNUMsT0FBTyxJQUFJb0QsS0FBSyxDQUFDRixLQUFLLENBQUMsQ0FBQ0csSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQyxDQUFDTSxNQUFNLENBQUMsVUFBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUs7UUFDeEUsT0FBT0QsTUFBTSxHQUFHQyxJQUFJLENBQUMsQ0FBQztNQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUN2SixTQUFTLENBQUMsQ0FBQyxFQUFFK0YsTUFBTSxDQUFDO0lBQzdCO0VBQUM7RUFBQSxPQUFBOEMsT0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDZEg7QUFDQTtBQUNBO0FBQ08sU0FBU1csaUJBQWlCQSxDQUFDQyxDQUFRLEVBQVM7RUFDakQsTUFBTSxJQUFJOUgsS0FBSyxzQkFBQTdCLE1BQUEsQ0FBc0IySixDQUFDLG9DQUFpQyxDQUFDO0FBQzFFO0FBRUEsK0RBQWVELGlCQUFpQixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BoQztBQUNBO0FBQ0E7QUFGQSxJQUtxQkUsU0FBUztFQUFBLFNBQUFBLFVBQUE7SUFBQW5PLDJJQUFBLE9BQUFtTyxTQUFBO0lBQUFsTywySUFBQSxxQkFDVyxFQUFFO0VBQUE7RUFBQVMsd0lBQUEsQ0FBQXlOLFNBQUE7SUFBQXhOLEdBQUE7SUFBQUMsR0FBQSxFQUV6QyxTQUFBQSxJQUFBLEVBQThCO01BQzVCLE9BQU8sSUFBSSxDQUFDd04sVUFBVTtJQUN4QjtFQUFDO0lBQUF6TixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ0IsSUFBSXdNLFFBQW1CLEVBQVE7TUFDN0IsSUFBSSxDQUFDRCxVQUFVLENBQUM3RSxJQUFJLENBQUM4RSxRQUFRLENBQUM7SUFDaEM7RUFBQztJQUFBMU4sR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXlOLE9BQU9ELFFBQVEsRUFBUTtNQUNyQixJQUFJLENBQUNELFVBQVUsR0FBRyxJQUFJLENBQUNBLFVBQVUsQ0FBQ04sTUFBTSxDQUFDLFVBQUNTLEtBQUssRUFBRUMsSUFBSSxFQUFLO1FBQ3hELElBQUksRUFBRUEsSUFBSSxLQUFLSCxRQUFRLENBQUMsRUFBRTtVQUN4QkUsS0FBSyxDQUFDaEYsSUFBSSxDQUFDaUYsSUFBSSxDQUFDO1FBQ2xCO1FBRUEsT0FBT0QsS0FBSztNQUNkLENBQUMsRUFBRSxFQUFzQixDQUFDO0lBQzVCO0VBQUM7RUFBQSxPQUFBSixTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Qkg7QUFDQTtBQUNBOztBQUVzQztBQUFBLElBRWpCTSxlQUFlO0VBbUJsQyxTQUFBQSxnQkFBWUMsU0FBdUIsRUFBRTtJQUFBMU8sMklBQUEsT0FBQXlPLGVBQUE7SUFBQXhPLDJJQUFBO0lBQ25DLElBQUksQ0FBQzBPLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDaE8sd0lBQUEsQ0FBQStOLGVBQUE7SUFBQTlOLEdBQUE7SUFBQUUsS0FBQSxFQWxCRCxTQUFBK04sSUFBSUMsUUFBc0IsRUFBRUMsT0FBZSxFQUFFQyxRQUFnQixFQUFFQyxJQUFVLEVBQVE7TUFDL0UsSUFBSUgsUUFBUSxHQUFHLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQzlCO01BQ0Y7TUFFQSxJQUFNTSxXQUFXLE1BQUExSyxNQUFBLENBQU15SyxJQUFJLENBQUNFLFdBQVcsQ0FBQyxDQUFDLFFBQUEzSyxNQUFBLENBQUt3SyxRQUFRLFNBQUF4SyxNQUFBLENBQU00SyxpREFBWSxDQUFDTixRQUFRLENBQUMsUUFBQXRLLE1BQUEsQ0FBS3VLLE9BQU8sQ0FBRTtNQUVoRyxJQUFJRCxRQUFRLEdBQUdNLHNEQUFpQixFQUFFO1FBQ2hDQyxPQUFPLENBQUNSLEdBQUcsQ0FBQ0ssV0FBVyxDQUFDO1FBRXhCO01BQ0Y7TUFFQUcsT0FBTyxDQUFDakYsS0FBSyxDQUFDOEUsV0FBVyxDQUFDO0lBQzVCO0VBQUM7RUFBQSxPQUFBUixlQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Qkg7QUFDQTtBQUNBO0FBQ0E7O0FBS08sSUFBS1UsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBU3ZCLElBSW9CRSxNQUFNO0VBOEx6QixTQUFBQSxPQUFZTixRQUFnQixFQUFFTyxTQUFvQixFQUFFWixTQUEyQixFQUFFO0lBQUExTywySUFBQSxPQUFBcVAsTUFBQTtJQUFBcFAsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDL0UsSUFBSSxDQUFDc1AsU0FBUyxHQUFHUixRQUFRO0lBQ3pCLElBQUksQ0FBQ1gsVUFBVSxHQUFHa0IsU0FBUztJQUMzQixJQUFJLENBQUNYLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDaE8sd0lBQUEsQ0FBQTJPLE1BQUE7SUFBQTFPLEdBQUE7SUFBQUMsR0FBQSxFQTdMRCxTQUFBQSxJQUFBLEVBQXVCO01BQ3JCLE9BQU8sSUFBSSxDQUFDMk8sU0FBUztJQUN2QjtFQUFDO0lBQUE1TyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJCO01BQ3pCLE9BQU8sSUFBSSxDQUFDd04sVUFBVTtJQUN4QjtFQUFDO0lBQUF6TixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWtDO01BQ2hDLE9BQU8sSUFBSSxDQUFDK04sVUFBVTtJQUN4QjtFQUFDO0lBQUFoTyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMk8sTUFBQSxFQUEwQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDYixVQUFVLENBQUM5TixLQUFLLElBQUksSUFBSSxDQUFDOE4sVUFBVSxDQUFDOU4sS0FBSyxHQUFHc08sWUFBWSxDQUFDTSxLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBbkYsTUFBQSxFQUhNb0YsSUFBSSxPQUFBaEMsS0FBQSxDQUFBOEIsSUFBQSxHQUFBRyxJQUFBLE1BQUFBLElBQUEsR0FBQUgsSUFBQSxFQUFBRyxJQUFBO1FBQUpELElBQUksQ0FBQUMsSUFBQSxJQUFBRixTQUFBLENBQUFFLElBQUE7TUFBQTtNQUtYLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ08sWUFBWSxDQUFDTSxLQUFLLEVBQUVHLElBQUksQ0FBQztJQUNwQztFQUFDO0lBQUFqUCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaVAsTUFBQSxFQUEwQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDbkIsVUFBVSxDQUFDOU4sS0FBSyxJQUFJLElBQUksQ0FBQzhOLFVBQVUsQ0FBQzlOLEtBQUssR0FBR3NPLFlBQVksQ0FBQ1ksS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFMLFNBQUEsQ0FBQW5GLE1BQUEsRUFITW9GLElBQUksT0FBQWhDLEtBQUEsQ0FBQW9DLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKTCxJQUFJLENBQUFLLEtBQUEsSUFBQU4sU0FBQSxDQUFBTSxLQUFBO01BQUE7TUFLWCxJQUFJLENBQUNyQixHQUFHLENBQUNPLFlBQVksQ0FBQ1ksS0FBSyxFQUFFSCxJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBalAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQThJLEtBQUEsRUFBeUI7TUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQ2dGLFVBQVUsQ0FBQzlOLEtBQUssSUFBSSxJQUFJLENBQUM4TixVQUFVLENBQUM5TixLQUFLLEdBQUdzTyxZQUFZLENBQUNlLElBQUksRUFBRTtRQUN2RTtNQUNGO01BQUMsU0FBQUMsS0FBQSxHQUFBUixTQUFBLENBQUFuRixNQUFBLEVBSEtvRixJQUFJLE9BQUFoQyxLQUFBLENBQUF1QyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSlIsSUFBSSxDQUFBUSxLQUFBLElBQUFULFNBQUEsQ0FBQVMsS0FBQTtNQUFBO01BS1YsSUFBSSxDQUFDeEIsR0FBRyxDQUFDTyxZQUFZLENBQUNlLElBQUksRUFBRU4sSUFBSSxDQUFDO0lBQ25DO0VBQUM7SUFBQWpQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3UCxLQUFBLEVBQXlCO01BQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMxQixVQUFVLENBQUM5TixLQUFLLElBQUksSUFBSSxDQUFDOE4sVUFBVSxDQUFDOU4sS0FBSyxHQUFHc08sWUFBWSxDQUFDbUIsSUFBSSxFQUFFO1FBQ3ZFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFaLFNBQUEsQ0FBQW5GLE1BQUEsRUFIS29GLElBQUksT0FBQWhDLEtBQUEsQ0FBQTJDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKWixJQUFJLENBQUFZLEtBQUEsSUFBQWIsU0FBQSxDQUFBYSxLQUFBO01BQUE7TUFLVixJQUFJLENBQUM1QixHQUFHLENBQUNPLFlBQVksQ0FBQ21CLElBQUksRUFBRVYsSUFBSSxDQUFDO0lBQ25DO0VBQUM7SUFBQWpQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzSixNQUFBLEVBQTBCO01BQ3hCLElBQUksQ0FBQyxJQUFJLENBQUN3RSxVQUFVLENBQUM5TixLQUFLLElBQUksSUFBSSxDQUFDOE4sVUFBVSxDQUFDOU4sS0FBSyxHQUFHc08sWUFBWSxDQUFDL0ksS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBcUssS0FBQSxHQUFBZCxTQUFBLENBQUFuRixNQUFBLEVBSE1vRixJQUFJLE9BQUFoQyxLQUFBLENBQUE2QyxLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBSmQsSUFBSSxDQUFBYyxLQUFBLElBQUFmLFNBQUEsQ0FBQWUsS0FBQTtNQUFBO01BS1gsSUFBSSxDQUFDOUIsR0FBRyxDQUFDTyxZQUFZLENBQUMvSSxLQUFLLEVBQUV3SixJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBalAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQThQLE1BQUEsRUFBMEI7TUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQ2hDLFVBQVUsQ0FBQzlOLEtBQUssSUFBSSxJQUFJLENBQUM4TixVQUFVLENBQUM5TixLQUFLLEdBQUdzTyxZQUFZLENBQUN5QixLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUFDLEtBQUEsR0FBQWxCLFNBQUEsQ0FBQW5GLE1BQUEsRUFITW9GLElBQUksT0FBQWhDLEtBQUEsQ0FBQWlELEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKbEIsSUFBSSxDQUFBa0IsS0FBQSxJQUFBbkIsU0FBQSxDQUFBbUIsS0FBQTtNQUFBO01BS1gsSUFBSSxDQUFDbEMsR0FBRyxDQUFDTyxZQUFZLENBQUN5QixLQUFLLEVBQUVoQixJQUFJLENBQUM7SUFDcEM7RUFBQztJQUFBalAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQStOLElBQVltQyxLQUFhLEVBQUVuQixJQUFTLEVBQVE7TUFBQSxJQUFBMU8sS0FBQTtNQUMxQyxJQUFNOE4sSUFBSSxHQUFHLElBQUk3TyxJQUFJLENBQUMsQ0FBQztNQUN2QixJQUFNMk8sT0FBTyxHQUFHLElBQUksQ0FBQ2tDLG1CQUFtQixDQUFDcEIsSUFBSSxDQUFDO01BRTlDLElBQUksQ0FBQ3hCLFVBQVUsQ0FBQ3ZOLEtBQUssQ0FBQ3VNLE9BQU8sQ0FBQyxVQUFDaUIsUUFBbUIsRUFBSztRQUNyREEsUUFBUSxDQUFDTyxHQUFHLENBQUNtQyxLQUFLLEVBQUVqQyxPQUFPLEVBQUU1TixLQUFJLENBQUM2TixRQUFRLEVBQUVDLElBQUksQ0FBQztNQUNuRCxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFyTyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbVEsb0JBQTRCcEIsSUFBUyxFQUFVO01BQUEsSUFBQTFOLE1BQUE7TUFDN0MsSUFBSStPLHlCQUF5QixHQUFHckIsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN2QyxJQUFJc0IsS0FBSyxHQUFHLENBQUM7TUFFYixPQUFPRCx5QkFBeUIsQ0FBQzNNLE9BQU8sSUFBSXNMLElBQUksQ0FBQ3BGLE1BQU0sR0FBRyxDQUFDLElBQUkwRyxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ3pFQSxLQUFLLEdBQUdELHlCQUF5QixDQUFDM00sT0FBTyxDQUFDLEdBQUcsRUFBRTRNLEtBQUssQ0FBQztRQUVyRCxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1VBQ2IsSUFBTWpKLElBQUksR0FBR2dKLHlCQUF5QixDQUFDeE0sU0FBUyxDQUFDeU0sS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLENBQUMsQ0FBQztVQUV0RSxRQUFRakosSUFBSTtZQUNWLEtBQUssR0FBRztjQUNOO2NBQ0FnSix5QkFBeUIsR0FBR0EseUJBQXlCLENBQUN4TSxTQUFTLENBQUMsQ0FBQyxFQUFFeU0sS0FBSyxDQUFDLEdBQUdELHlCQUF5QixDQUFDeE0sU0FBUyxDQUFDeU0sS0FBSyxHQUFHLENBQUMsQ0FBQztjQUMxSEEsS0FBSyxFQUFFO2NBRVA7WUFDRixLQUFLLEdBQUc7WUFDUixLQUFLLEdBQUc7Y0FDTjtjQUNBdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHcUIseUJBQXlCLEdBQUcsSUFBSSxDQUFDRSxlQUFlLENBQ3hELElBQUksQ0FBQzlELFFBQVEsQ0FBQ3VDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QnFCLHlCQUF5QixFQUN6QkMsS0FDRixDQUFDO2NBQ0R0QixJQUFJLENBQUN3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUVqQjtZQUNGLEtBQUssR0FBRztjQUNOO2NBQ0F4QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdxQix5QkFBeUIsR0FBRyxJQUFJLENBQUNFLGVBQWUsQ0FDeEQsSUFBSSxDQUFDRSxTQUFTLENBQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkJxQix5QkFBeUIsRUFDekJDLEtBQ0YsQ0FBQztjQUVEdEIsSUFBSSxDQUFDd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Y0FFakI7WUFDRjtjQUNFLE9BQU94QixJQUFJLENBQUN2QyxRQUFRLENBQUMsQ0FBQztVQUMxQjtRQUNGO01BQ0Y7TUFFQSxJQUFJdUMsSUFBSSxDQUFDcEYsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQm9GLElBQUksR0FBR0EsSUFBSSxDQUFDOUIsTUFBTSxDQUFDLFVBQUN3RCxXQUFXLEVBQUVDLFlBQVksRUFBRUwsS0FBSyxFQUFFTSxLQUFLLEVBQUs7VUFDOUQsSUFBSU4sS0FBSyxHQUFHLENBQUMsS0FBS00sS0FBSyxDQUFDaEgsTUFBTSxJQUFJK0csWUFBWSxZQUFZbkwsS0FBSyxFQUFFO1lBQy9ELE9BQU9rTCxXQUFXLEdBQUcsSUFBSSxHQUFHcFAsTUFBSSxDQUFDbUwsUUFBUSxDQUFDa0UsWUFBWSxDQUFDRSxLQUFLLENBQUM7VUFDL0Q7VUFFQSxPQUFPSCxXQUFXLE9BQUEvTSxNQUFBLENBQU9yQyxNQUFJLENBQUNtTCxRQUFRLENBQUNrRSxZQUFZLENBQUMsTUFBRztRQUN6RCxDQUFDLENBQUM7TUFDSjtNQUVBLE9BQU8zQixJQUFJLENBQUN2QyxRQUFRLENBQUMsQ0FBQztJQUN4QjtFQUFDO0lBQUExTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd1EsVUFBa0JLLEdBQVEsRUFBVTtNQUNsQyxJQUFNQyxLQUFLLEdBQUcsRUFBRTtNQUVoQixJQUFJO1FBQ0YsT0FBT2pILElBQUksQ0FBQzJHLFNBQVMsQ0FDbkJLLEdBQUcsWUFBWXRMLEtBQUssR0FBRyxJQUFJLENBQUNpSCxRQUFRLENBQUNxRSxHQUFHLENBQUMsR0FBR0EsR0FBRyxFQUMvQyxVQUFDL1EsR0FBRyxFQUFFRSxLQUFLLEVBQUs7VUFDZCxJQUFJLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLFlBQVkrUSxNQUFNLEVBQUU7WUFDdEMsSUFBSUQsS0FBSyxDQUFDOU0sUUFBUSxDQUFDaEUsS0FBSyxDQUFDLEVBQUU7Y0FDekIsT0FBTyxhQUFhO1lBQ3RCO1lBRUE4USxLQUFLLENBQUNwSSxJQUFJLENBQUMxSSxLQUFLLENBQUM7VUFDbkI7VUFFQSxPQUFPQSxLQUFLO1FBQ2QsQ0FBQyxFQUNELENBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQyxPQUFPK0osQ0FBQyxFQUFFO1FBQ1YsT0FBTyxpQ0FBaUM7TUFDMUM7SUFDRjtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBc1EsZ0JBQXdCVSxRQUFhLEVBQUVaLHlCQUFpQyxFQUFFQyxLQUFhLEVBQVU7TUFDL0YsT0FBT0QseUJBQXlCLENBQUN4TSxTQUFTLENBQUMsQ0FBQyxFQUFFeU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDN0QsUUFBUSxDQUFDd0UsUUFBUSxDQUFDLEdBQUdaLHlCQUF5QixDQUFDeE0sU0FBUyxDQUFDeU0sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqSTtFQUFDO0lBQUF2USxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd00sU0FBaUJ5RSxJQUFTLEVBQVU7TUFDbEMsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU9BLElBQUk7TUFDYjtNQUVBLElBQUksT0FBT0EsSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUM3QixPQUFPQSxJQUFJLEdBQUcsTUFBTSxHQUFHLE9BQU87TUFDaEM7TUFFQSxJQUFJLE9BQU9BLElBQUksS0FBSyxRQUFRLEVBQUU7UUFDNUIsT0FBT0EsSUFBSSxDQUFDekUsUUFBUSxDQUFDLENBQUM7TUFDeEI7TUFFQSxJQUFJMEUsV0FBVyxHQUFHLEVBQUU7TUFFcEIsSUFBSUQsSUFBSSxFQUFFO1FBQ1IsSUFBSSxPQUFPQSxJQUFJLEtBQUssVUFBVSxFQUFFO1VBQzlCQyxXQUFXLEdBQUdELElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUMsTUFBTSxJQUFJeUUsSUFBSSxZQUFZRixNQUFNLEVBQUU7VUFDakMsSUFBSTtZQUNGRyxXQUFXLEdBQUdELElBQUksQ0FBQ3pFLFFBQVEsQ0FBQyxDQUFDO1VBQy9CLENBQUMsQ0FBQyxPQUFPekMsQ0FBQyxFQUFFO1lBQ1ZtSCxXQUFXLEdBQUcsNkJBQTZCO1VBQzdDO1FBQ0Y7TUFDRjtNQUVBLE9BQU9BLFdBQVc7SUFDcEI7RUFBQztFQUFBLE9BQUExQyxNQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDak5IO0FBQ0E7QUFDQTtBQUN5RDtBQUNYO0FBQUEsSUFFekIzSixjQUFjO0VBQUEsU0FBQUEsZUFBQTtJQUFBMUYsMklBQUEsT0FBQTBGLGNBQUE7RUFBQTtFQUFBaEYsd0lBQUEsQ0FBQWdGLGNBQUE7SUFBQS9FLEdBQUE7SUFBQUMsR0FBQSxFQUNqQyxTQUFBQSxJQUFBLEVBQStDO01BQzdDLE9BQU91Tyx3REFBWSxDQUFDOUQsd0VBQXNCLENBQUM7SUFDN0M7RUFBQztJQUFBMUssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPdU8sd0RBQVksQ0FBQzlELDRFQUEwQixDQUFDO0lBQ2pEO0VBQUM7SUFBQTFLLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0Q7TUFDdEQsT0FBT3VPLDZEQUFpQjtJQUMxQjtFQUFDO0VBQUEsT0FBQXpKLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQkg7QUFDQTtBQUNBOztBQUU4QztBQUNWO0FBQ2M7QUFDRjtBQUNjO0FBQ1c7QUFDTTtBQUVqQztBQUFBLElBRXpCNkMsYUFBYTtFQTZEaEMsU0FBQUEsY0FBQSxFQUFzQjtJQUFBdkksMklBQUEsT0FBQXVJLGFBQUE7SUFDcEIsTUFBTSxJQUFJbkMsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMxRix3SUFBQSxDQUFBNkgsYUFBQTtJQUFBNUgsR0FBQTtJQUFBQyxHQUFBLEVBeERELFNBQUFBLElBQUEsRUFBNEQ7TUFDMUQsT0FBTzJILGFBQWEsQ0FBQ3lKLHVCQUF1QjtJQUM5QztFQUFDO0lBQUFyUixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb1IsVUFBaUJsRCxRQUFnQixFQUFXO01BQzFDLElBQUksT0FBT0EsUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQ0EsUUFBUSxHQUFHLEtBQUs7TUFDbEI7TUFFQSxJQUFNbUQsTUFBTSxHQUFHM0osYUFBYSxDQUFDNEosUUFBUSxDQUFDcEQsUUFBUSxDQUFDO01BRS9DLElBQUltRCxNQUFNLEVBQUU7UUFDVixPQUFPQSxNQUFNO01BQ2Y7TUFFQSxPQUFPM0osYUFBYSxDQUFDNEosUUFBUSxDQUFDcEQsUUFBUSxDQUFDLEdBQUcsSUFBSU0sNENBQU0sQ0FBQ04sUUFBUSxFQUFFLElBQUksQ0FBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQ08sVUFBVSxDQUFDO0lBQ2xHO0VBQUM7SUFBQWhPLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF1Uiw0Q0FBQSxFQUEyRDtNQUN6RDdKLGFBQWEsQ0FBQzhKLGlCQUFpQixDQUFDLENBQUM7TUFDakM5SixhQUFhLENBQUMrSix5QkFBeUIsQ0FBQyxTQUFTLEVBQUUvSixhQUFhLENBQUNnSyxrQkFBa0IsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQy9GakssYUFBYSxDQUFDK0oseUJBQXlCLENBQUMsV0FBVyxFQUFFL0osYUFBYSxDQUFDa0ssb0JBQW9CLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRztFQUFDO0lBQUE3UixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd1Isa0JBQUEsRUFBeUM7TUFDdkMsSUFBTUssY0FBYyxHQUFHLElBQUksQ0FBQ0MsNkJBQTZCLENBQUM1TixjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFaEcsSUFBSW9LLGlEQUFZLENBQUN1RCxjQUFjLENBQUMsRUFBRTtRQUNoQyxJQUFJLENBQUMvRCxVQUFVLENBQUNpRSxZQUFZLENBQUN6RCxpREFBWSxDQUFDdUQsY0FBYyxDQUFDLENBQUM7TUFDNUQ7TUFFQTtJQUNGO0VBQUM7SUFBQS9SLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5UiwwQkFBeUN0TixJQUFZLEVBQUU2TixhQUE0QyxFQUFRO01BQ3pHLElBQU1ILGNBQWMsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDNU4sY0FBYyxXQUFBUixNQUFBLENBQVdTLElBQUksbUJBQWdCLENBQUM7TUFFeEcsSUFBSTBOLGNBQWMsS0FBSyxLQUFLLEVBQUU7UUFDNUI7TUFDRjtNQUVBRyxhQUFhLENBQUMxRCxpREFBWSxDQUFDdUQsY0FBYyxDQUFDLENBQUM7SUFDN0M7RUFBQztJQUFBL1IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBSLG1CQUFrQ3hCLEtBQW1CLEVBQVE7TUFDM0QsSUFBSSxDQUFDM0MsVUFBVSxDQUFDdk0sR0FBRyxDQUFDLElBQUk0TSxxREFBZSxDQUFDc0MsS0FBSyxJQUFJckwsZ0ZBQXlDLENBQUMsQ0FBQztJQUM5RjtFQUFDO0lBQUEvRSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNFIscUJBQW9DMUIsS0FBbUIsRUFBUTtNQUM3RCxJQUFJLENBQUNpQix1QkFBdUIsQ0FBQ3RELFNBQVMsR0FBR3FDLEtBQUssSUFBSXJMLGtGQUEyQztNQUU3RixJQUFJLENBQUMwSSxVQUFVLENBQUN2TSxHQUFHLENBQUMsSUFBSWlSLGdFQUFpQixDQUFDLElBQUksQ0FBQ2QsdUJBQXVCLENBQUMsQ0FBQztJQUMxRTtFQUFDO0VBQUEsT0FBQXpKLGFBQUE7QUFBQTtBQUFBdEksMklBQUEsQ0EzRGtCc0ksYUFBYSxtQ0FDOEMsSUFBSXpELHNFQUE0QixDQUFDLENBQUM7QUFBQTdFLDJJQUFBLENBRDdGc0ksYUFBYSxjQUV5QixDQUFDLENBQUM7QUFBQXRJLDJJQUFBLENBRnhDc0ksYUFBYSxnQkFHTyxJQUFJNEYsK0NBQVMsQ0FBQyxDQUFDO0FBQUFsTywySUFBQSxDQUhuQ3NJLGFBQWEsZ0JBSWMsSUFBSXdLLHNEQUFnQixDQUFDLENBQUM7QUFBQTlTLDJJQUFBLENBSmpEc0ksYUFBYSw2QkFLaUMsSUFBSXlLLHNFQUFzQixDQUFDLENBQUM7QUFMN0Q7QUFrRWxDekssYUFBYSxDQUFDNkosMkNBQTJDLENBQUMsQ0FBQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEYzRDtBQUNBO0FBQ0E7QUFDMEQ7QUFDRjtBQUFBLElBRW5DM00sbUJBQW1CO0VBQUEsU0FBQUEsb0JBQUE7SUFBQXpGLDJJQUFBLE9BQUF5RixtQkFBQTtFQUFBO0VBQUEvRSx3SUFBQSxDQUFBK0UsbUJBQUE7SUFBQTlFLEdBQUE7SUFBQUUsS0FBQSxFQUN0QyxTQUFBb1Msc0NBQTZDQyxZQUEwQixFQUFvQjtNQUN6RixRQUFRQSxZQUFZO1FBQ2xCLEtBQUsvRCxxREFBZ0I7VUFDbkIsT0FBTyxLQUFLO1FBQ2QsS0FBS0EsdURBQWtCO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLQSx1REFBa0I7VUFDckIsT0FBTyxPQUFPO1FBQ2hCLEtBQUtBLHNEQUFpQjtVQUNwQixPQUFPLE9BQU87UUFDaEIsS0FBS0Esc0RBQWlCO1VBQ3BCLE9BQU8sTUFBTTtRQUNmLEtBQUtBLHVEQUFrQjtVQUNyQixPQUFPLE9BQU87UUFDaEIsS0FBS0EsdURBQWtCO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLQSxxREFBZ0I7VUFDbkIsT0FBTyxLQUFLO1FBQ2Q7VUFDRWxCLGdFQUFpQixDQUFDaUYsWUFBWSxDQUFDO01BQ25DO0lBQ0Y7RUFBQztJQUFBdlMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXNTLHNDQUE2Q0MsZ0JBQWtDLEVBQWdCO01BQzdGLFFBQVFBLGdCQUFnQjtRQUN0QixLQUFLLEtBQUs7VUFDUixPQUFPakUscURBQWdCO1FBQ3pCLEtBQUssT0FBTztVQUNWLE9BQU9BLHVEQUFrQjtRQUMzQixLQUFLLE9BQU87VUFDVixPQUFPQSx1REFBa0I7UUFDM0IsS0FBSyxNQUFNO1VBQ1QsT0FBT0Esc0RBQWlCO1FBQzFCLEtBQUssTUFBTTtVQUNULE9BQU9BLHNEQUFpQjtRQUMxQixLQUFLLE9BQU87VUFDVixPQUFPQSx1REFBa0I7UUFDM0IsS0FBSyxPQUFPO1VBQ1YsT0FBT0EsdURBQWtCO1FBQzNCLEtBQUssS0FBSztVQUNSLE9BQU9BLHFEQUFnQjtRQUN6QjtVQUNFbEIsZ0VBQWlCLENBQUNtRixnQkFBZ0IsQ0FBQztNQUN2QztJQUNGO0VBQUM7RUFBQSxPQUFBM04sbUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25ESDtBQUNBO0FBQ0E7QUFDOEM7QUFBQSxJQUd6QnNOLGdCQUFnQjtFQUFBLFNBQUFBLGlCQUFBO0lBQUEvUywySUFBQSxPQUFBK1MsZ0JBQUE7SUFBQTlTLDJJQUFBLHFCQUNBeUYsd0VBQWtDO0VBQUE7RUFBQWhGLHdJQUFBLENBQUFxUyxnQkFBQTtJQUFBcFMsR0FBQTtJQUFBQyxHQUFBLEVBRXJFLFNBQUFBLElBQUEsRUFBMEI7TUFDeEIsT0FBTyxJQUFJLENBQUMrTixVQUFVO0lBQ3hCO0VBQUM7SUFBQWhPLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUErUixhQUFhbEUsU0FBdUIsRUFBUTtNQUMxQyxJQUFJLENBQUNDLFVBQVUsR0FBR0QsU0FBUztJQUM3QjtFQUFDO0VBQUEsT0FBQXFFLGdCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZIO0FBQ0E7QUFDQTtBQUNzRDtBQUNJO0FBQ2xCO0FBQUEsSUFFbkIzSixVQUFVO0VBRzdCLFNBQUFBLFdBQVlpSyxPQUFvQixFQUFFO0lBQUFyVCwySUFBQSxPQUFBb0osVUFBQTtJQUFBbkosMklBQUE7SUFDaEMsSUFBSSxDQUFDcVQsUUFBUSxHQUFHRCxPQUFPO0VBQ3pCO0VBQUMzUyx3SUFBQSxDQUFBMEksVUFBQTtJQUFBekksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXdJLFFBQUEsRUFBa0I7TUFDaEIsT0FBT1AsaURBQVcsQ0FBQyxJQUFJLENBQUN3SyxRQUFRLENBQUM7SUFDbkM7RUFBQztJQUFBM1MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBTLGtCQUFBLEVBQW9DO01BQ2xDLFFBQVEsSUFBSSxDQUFDRCxRQUFRO1FBQ25CLEtBQUt4SyxrRUFBNEI7VUFDL0IsT0FBTzBLLDJFQUF3QjtRQUNqQyxLQUFLMUssaUZBQTJDO1VBQzlDLE9BQU8wSywyRUFBd0I7UUFDakMsS0FBSzFLLHlEQUFtQjtVQUN0QixPQUFPMEsscUVBQWtCO1FBQzNCLEtBQUsxSywyREFBcUI7VUFDeEIsT0FBTzBLLHFFQUFrQjtRQUMzQixLQUFLMUssZ0VBQTBCO1VBQzdCLE9BQU8wSyxxRUFBa0I7UUFDM0IsS0FBSzFLLDZEQUF1QjtVQUMxQixPQUFPMEsscUVBQWtCO1FBQzNCLEtBQUsxSywrREFBeUI7VUFDNUIsT0FBTzBLLHFFQUFrQjtRQUMzQixLQUFLMUssNEVBQXNDO1VBQ3pDLE9BQU8wSyxxRUFBa0I7UUFDM0IsS0FBSzFLLDZEQUF1QjtVQUMxQixPQUFPMEsscUVBQWtCO1FBQzNCLEtBQUsxSyxtRUFBNkI7VUFDaEMsT0FBTzBLLHFFQUFrQjtRQUMzQixLQUFLMUssdUVBQWlDO1VBQ3BDLE9BQU8wSyxxRUFBa0I7UUFDM0IsS0FBSzFLLHVFQUFpQztVQUNwQyxPQUFPMEsscUVBQWtCO1FBQzNCO1VBQ0V2RixnRUFBaUIsQ0FBQyxJQUFJLENBQUNxRixRQUFRLENBQUM7TUFDcEM7SUFDRjtFQUFDO0VBQUEsT0FBQWxLLFVBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQ0g7QUFDQTtBQUNBO0FBQ2tEO0FBRTNDLElBQUtvSyxjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQUEsT0FBZEEsY0FBYztBQUFBO0FBSXpCLElBSW9CQyxvQkFBb0I7RUFBQSxTQUFBQSxxQkFBQTtJQUFBelQsMklBQUEsT0FBQXlULG9CQUFBO0lBQUF4VCwySUFBQSxlQUN4QixtREFBbUQ7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEscUJBSTdCdUYsNEVBQXNDO0VBQUE7RUFBQTlFLHdJQUFBLENBQUErUyxvQkFBQTtJQUFBOVMsR0FBQTtJQUFBQyxHQUFBLEVBRTNFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUM4UyxJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNQyxVQUFVLEdBQUcsSUFBSS9NLEdBQUcsQ0FBQzhNLEdBQUcsQ0FBQztNQUUvQkMsVUFBVSxDQUFDQyxRQUFRLEdBQUdELFVBQVUsQ0FBQ0MsUUFBUSxHQUFHLFVBQVU7TUFFdEQsSUFBSSxDQUFDSixJQUFJLEdBQUdHLFVBQVUsQ0FBQ3hHLFFBQVEsQ0FBQyxDQUFDO0lBQ25DO0VBQUM7SUFBQTFNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEI7TUFDeEIsT0FBTyxJQUFJLENBQUNtVCxZQUFZO0lBQzFCLENBQUM7SUFBQUosR0FBQSxFQUVELFNBQUFBLElBQWdCSyxXQUFtQixFQUFFO01BQ25DLElBQUksQ0FBQ0QsWUFBWSxHQUFHQyxXQUFXO0lBQ2pDO0VBQUM7SUFBQXJULEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUNxVCxRQUFRO0lBQ3RCLENBQUM7SUFBQU4sR0FBQSxFQUVELFNBQUFBLElBQVlPLE9BQWUsRUFBRTtNQUMzQixJQUFJLENBQUNELFFBQVEsR0FBR0MsT0FBTztJQUN6QjtFQUFDO0lBQUF2VCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdCO01BQ3RCLE9BQU8sSUFBSSxDQUFDdVQsVUFBVTtJQUN4QixDQUFDO0lBQUFSLEdBQUEsRUFFRCxTQUFBQSxJQUFjUyxTQUFpQixFQUFFO01BQy9CLElBQUksQ0FBQ0QsVUFBVSxHQUFHQyxTQUFTO0lBQzdCO0VBQUM7SUFBQXpULEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBZ0M7TUFDOUIsT0FBTyxJQUFJLENBQUMrTixVQUFVO0lBQ3hCLENBQUM7SUFBQWdGLEdBQUEsRUFFRCxTQUFBQSxJQUFjakYsU0FBeUIsRUFBRTtNQUN2QyxJQUFJLENBQUNDLFVBQVUsR0FBR0QsU0FBUztJQUM3QjtFQUFDO0VBQUEsT0FBQStFLG9CQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlESDtBQUNBO0FBQ0E7O0FBRThDO0FBQzhCO0FBQy9DO0FBQ2tCO0FBQ0Y7QUFDZ0I7QUFBQSxJQUV4Q1ksY0FBYztFQXNDakMsU0FBQUEsZUFBQSxFQUFzQjtJQUFBclUsMklBQUEsT0FBQXFVLGNBQUE7SUFDcEIsTUFBTSxJQUFJak8sS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMxRix3SUFBQSxDQUFBMlQsY0FBQTtJQUFBMVQsR0FBQTtJQUFBRSxLQUFBLEVBckNELFNBQUF5VCxrQkFBeUJWLEdBQVcsRUFBa0I7TUFDcEQsSUFBSSxPQUFPQSxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLE1BQU0sSUFBSXhOLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDdkI7TUFFQSxJQUFNbU8sZUFBZSxHQUFHRixjQUFjLENBQUNHLGdCQUFnQixDQUFDWixHQUFHLENBQUM7TUFFNUQsSUFBSVcsZUFBZSxFQUFFO1FBQ25CLE9BQU9BLGVBQWU7TUFDeEI7TUFFQSxJQUFNRSxvQkFBb0IsR0FBRyxJQUFJaEIsMERBQW9CLENBQUMsQ0FBQztNQUV2RGdCLG9CQUFvQixDQUFDTCxTQUFTLEdBQUc1TCw2REFBbUI7TUFDcERpTSxvQkFBb0IsQ0FBQ1AsT0FBTyxHQUFHMUwsMkRBQWlCO01BQ2hEaU0sb0JBQW9CLENBQUNiLEdBQUcsR0FBR2Msc0VBQTRCLENBQUNkLEdBQUcsQ0FBQztNQUM1RGEsb0JBQW9CLENBQUNULFdBQVcsR0FBR1csMkVBQWlDLENBQUNmLEdBQUcsQ0FBQztNQUV6RWEsb0JBQW9CLENBQUMvRixTQUFTLEdBQUduSixzR0FBK0QsQ0FBQ2lELDREQUFrQixDQUFDO01BRXBILE9BQU82TCxjQUFjLENBQUNHLGdCQUFnQixDQUFDWixHQUFHLENBQUMsR0FBRyxJQUFJZ0Isb0RBQWMsQ0FBQ0gsb0JBQW9CLENBQUM7SUFDeEY7RUFBQztJQUFBOVQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWdVLGtCQUF5QkMsY0FBOEIsRUFBUTtNQUM3RCxJQUFNUCxlQUFlLEdBQUczQyxNQUFNLENBQUNtRCxNQUFNLENBQUNWLGNBQWMsQ0FBQ0csZ0JBQWdCLENBQUM7TUFFdEUsSUFBSUQsZUFBZSxJQUFJQSxlQUFlLENBQUMvSixNQUFNLEVBQUU7UUFDN0MrSixlQUFlLENBQUNuSCxPQUFPLENBQUMsVUFBQTlELGNBQWMsRUFBSTtVQUN4QyxJQUFNbUwsb0JBQW9CLEdBQUduTCxjQUFjLENBQUNtTCxvQkFBb0I7VUFFaEVBLG9CQUFvQixDQUFDL0YsU0FBUyxHQUFHb0csY0FBYztRQUNqRCxDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7RUFBQSxPQUFBVCxjQUFBO0FBQUE7QUFBQXBVLDJJQUFBLENBcENrQm9VLGNBQWMsc0JBQ3VDLENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1o1RTtBQUNBO0FBQ0E7O0FBRW9EO0FBQ1E7QUFDRDtBQUVyQjtBQUd0QyxJQUFNVyxnQkFBZ0IsR0FBRyxJQUFJO0FBQzdCLElBQU1DLGtCQUFrQixHQUFHLElBQUk7QUFBQyxJQWtDWEwsY0FBYywwQkFBQXBKLFlBQUEsRUFBQTBKLGtCQUFBO0VBU2pDLFNBQUFOLGVBQVlILG9CQUEwQyxFQUFFO0lBQUF6VSwySUFBQSxPQUFBNFUsY0FBQTtJQUFBM1UsMklBQUEsa0JBUnBCc0ksb0VBQXVCLENBQUMsZ0JBQWdCLENBQUM7SUFBQXRJLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBLG1CQUdwQyxFQUFFO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBLHdCQUVuQixDQUFDO0lBQUFBLDJJQUFBLGtCQUNQK0YsUUFBUSxDQUFDbVAsUUFBUTtJQUdqQyxJQUFJLENBQUNDLHFCQUFxQixHQUFHWCxvQkFBb0I7SUFDakQsSUFBSSxDQUFDWSxtQkFBbUIsR0FBRyxJQUFJQyw2REFBa0IsQ0FBQyxDQUFDO0VBQ3JEO0VBQUM1VSx3SUFBQSxDQUFBa1UsY0FBQTtJQUFBalUsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpRDtNQUMvQyxPQUFPLElBQUksQ0FBQ3dVLHFCQUFxQjtJQUNuQztFQUFDO0lBQUF6VSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMEksS0FBS2dNLE1BQWUsRUFBUTtNQUMxQixJQUFPM00sUUFBUSxHQUFtRDJNLE1BQU0sQ0FBakUzTSxRQUFRO1FBQUUvSCxLQUFLLEdBQTRDMFUsTUFBTSxDQUF2RDFVLEtBQUs7UUFBRTJVLGFBQWEsR0FBNkJELE1BQU0sQ0FBaERDLGFBQWE7UUFBRWhNLE9BQU8sR0FBb0IrTCxNQUFNLENBQWpDL0wsT0FBTztRQUFFaU0sUUFBUSxHQUFVRixNQUFNLENBQXhCRSxRQUFRO1FBQUVDLElBQUksR0FBSUgsTUFBTSxDQUFkRyxJQUFJO01BQzlELElBQU0xTSxVQUFVLEdBQUcsSUFBSUksZ0RBQVUsQ0FBQ21NLE1BQU0sQ0FBQ3ZNLFVBQVUsQ0FBQztNQUVwRCxJQUFJLElBQUksQ0FBQ29NLHFCQUFxQixDQUFDMUcsU0FBUyxHQUFHMUYsVUFBVSxDQUFDdUssaUJBQWlCLENBQUMsQ0FBQyxFQUFFO1FBQ3pFO01BQ0Y7TUFFQSxJQUFNb0MsWUFBWSxHQUFHO1FBQ25CQyxTQUFTLEVBQUUsSUFBSXpWLElBQUksQ0FBQyxDQUFDLENBQUMrTyxXQUFXLENBQUMsQ0FBQztRQUNuQ2dGLE9BQU8sRUFBRSxJQUFJLENBQUNrQixxQkFBcUIsQ0FBQ2xCLE9BQU87UUFDM0NFLFNBQVMsRUFBRSxJQUFJLENBQUNnQixxQkFBcUIsQ0FBQ2hCLFNBQVM7UUFDL0N4TCxRQUFRLEVBQVJBLFFBQVE7UUFDUjJNLE1BQU0sRUFBRXZNLFVBQVUsQ0FBQ0ssT0FBTyxDQUFDLENBQUM7UUFDNUJ4SSxLQUFLLEVBQUxBLEtBQUs7UUFDTDJVLGFBQWEsRUFBYkEsYUFBYTtRQUNiSyxpQkFBaUIsRUFBRSxJQUFJLENBQUNDLE9BQU87UUFDL0I5QixXQUFXLEVBQUUsSUFBSSxDQUFDb0IscUJBQXFCLENBQUNwQixXQUFXO1FBQ25EclAsT0FBTyxFQUFFb1IsMkVBQXlCO1FBQ2xDdk0sT0FBTyxFQUFQQSxPQUFPO1FBQ1BpTSxRQUFRLEVBQVJBLFFBQVE7UUFDUkMsSUFBSSxFQUFKQTtNQUNGLENBQUM7TUFFRCxJQUFJLENBQUNwQyxRQUFRLENBQUMvSixJQUFJLENBQUNvTSxZQUFZLENBQUM7TUFFaEMsSUFBTUssT0FBTyxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUMxQztFQUFDO0lBQUF0VixHQUFBO0lBQUFFLEtBQUEsV0FBQWtMLFlBQUFtSyxFQUFBO01BQUEsUUFBQTFLLFlBQUEsR0FBQUEsWUFBQSxJQUFBMkssNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBQyxRQUEwQkMsZUFBcUM7UUFBQSxJQUFBQyxRQUFBO1FBQUEsT0FBQUgsMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FDdkRKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUUvQkwsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDO2dCQUFDeUYsT0FBTyxFQUFFUjtjQUFlLENBQUMsQ0FBQyxDQUFDO2NBQUNHLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BRTNESSxLQUFLLENBQUMsSUFBSSxDQUFDM0IscUJBQXFCLENBQUN4QixHQUFHLEVBQUU7Z0JBQ2pEb0QsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVY7Y0FDUixDQUFDLENBQUM7WUFBQTtjQUFBLE9BQUFFLFFBQUEsQ0FBQVMsTUFBQSxXQUFBVCxRQUFBLENBQUFVLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDSCxJQUFBZ0IsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBb1Ysa0JBQUE7TUFBQSxRQUFBZixrQkFBQSxHQUFBQSxrQkFBQSxJQUFBaUIsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBa0IsU0FBQTtRQUFBLElBQUFwVyxLQUFBO1FBQUEsSUFBQW9WLGVBQUE7UUFBQSxPQUFBRiwySUFBQSxVQUFBbUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FBQSxNQUNNLElBQUksQ0FBQ3JELFFBQVEsQ0FBQzlJLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDaU4sVUFBVTtnQkFBQUQsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBYSxTQUFBLENBQUFOLE1BQUE7WUFBQTtjQUloRCxJQUFJLENBQUNPLFVBQVUsR0FBRyxJQUFJO2NBRWhCbkIsZUFBZSxHQUFHLElBQUksQ0FBQ2hELFFBQVEsQ0FBQ29FLEtBQUssQ0FBQyxDQUFDLEVBQUUxQyxnQkFBZ0IsQ0FBQztjQUVoRSxJQUFJLENBQUMxQixRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRLENBQUNvRSxLQUFLLENBQUMxQyxnQkFBZ0IsQ0FBQztjQUFDLE9BQUF3QyxTQUFBLENBQUFOLE1BQUEsV0FFL0MsSUFBSSxDQUFDbkwsV0FBVyxDQUFDdUssZUFBZSxDQUFDLENBQUNxQixJQUFJLENBQUMsVUFBQUMsUUFBUSxFQUFJO2dCQUN4RCxJQUFJMVcsS0FBSSxDQUFDMlcsNkJBQTZCLENBQUNELFFBQVEsQ0FBQyxFQUFFO2tCQUNoRCxJQUFJMVcsS0FBSSxDQUFDb1MsUUFBUSxDQUFDOUksTUFBTSxJQUFJeUssa0JBQWtCLEVBQUU7b0JBQzlDL1QsS0FBSSxDQUFDNFcsYUFBYSxFQUFFO29CQUVwQnBSLFVBQVUsQ0FBQyxZQUFNO3NCQUNmeEYsS0FBSSxDQUFDb1MsUUFBUSxNQUFBL08sTUFBQSxDQUFBd1QsOElBQUEsQ0FBT3pCLGVBQWUsR0FBQXlCLDhJQUFBLENBQUs3VyxLQUFJLENBQUNvUyxRQUFRLEVBQUM7c0JBRXREcFMsS0FBSSxDQUFDdVcsVUFBVSxHQUFHLEtBQUs7c0JBRXZCLElBQU16QixPQUFPLEdBQUc5VSxLQUFJLENBQUMrVSxpQkFBaUIsQ0FBQyxDQUFDO29CQUMxQyxDQUFDLEVBQUUvVSxLQUFJLENBQUNtVSxtQkFBbUIsQ0FBQzJDLDJDQUEyQyxDQUFDOVcsS0FBSSxDQUFDNFcsYUFBYSxDQUFDLENBQUM7b0JBRTVGO2tCQUNGO2tCQUVBNVcsS0FBSSxDQUFDd0ksT0FBTyxDQUFDUyxLQUFLLENBQUMsNERBQTRELEVBQUVqSixLQUFJLENBQUNvUyxRQUFRLENBQUM5SSxNQUFNLEVBQUU4TCxlQUFlLENBQUM5TCxNQUFNLENBQUM7Z0JBQ2hJO2dCQUVBdEosS0FBSSxDQUFDdVcsVUFBVSxHQUFHLEtBQUs7Z0JBQ3ZCdlcsS0FBSSxDQUFDNFcsYUFBYSxHQUFHLENBQUM7Z0JBRXRCLElBQU05QixPQUFPLEdBQUc5VSxLQUFJLENBQUMrVSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV4QyxPQUFPMkIsUUFBUTtjQUNqQixDQUFDLENBQUMsQ0FBQ0ssS0FBSyxDQUFDLFlBQU07Z0JBQ2IvVyxLQUFJLENBQUN1VyxVQUFVLEdBQUcsS0FBSztnQkFFdkIsSUFBTXpCLE9BQU8sR0FBRzlVLEtBQUksQ0FBQytVLGlCQUFpQixDQUFDLENBQUM7Y0FDMUMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF1QixTQUFBLENBQUFKLElBQUE7VUFBQTtRQUFBLEdBQUFFLFFBQUE7TUFBQSxDQUNILElBQUFELEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ1gsOEJBQUFLLElBQUEsRUFBbUU7TUFBQSxJQUE1QkMsTUFBTSxHQUFBRCxJQUFBLENBQU5DLE1BQU07TUFDM0MsT0FBTyxVQUFVLENBQUM3VSxJQUFJLENBQUM2VSxNQUFNLENBQUM5SyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNDO0VBQUM7RUFBQSxPQUFBdUgsY0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7QUNySkg7QUFDQTtBQUNBO0FBRkEsSUFHSzlMLFdBQVcsMEJBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBQSxPQUFYQSxXQUFXO0FBQUEsRUFBWEEsV0FBVztBQWVoQiwrREFBZUEsV0FBVyxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEIxQjtBQUNBO0FBQ0E7QUFDMEU7QUFDaEI7QUFBQSxJQUVyQ3ZELHFCQUFxQjtFQUFBLFNBQUFBLHNCQUFBO0lBQUF2RiwySUFBQSxPQUFBdUYscUJBQUE7RUFBQTtFQUFBN0Usd0lBQUEsQ0FBQTZFLHFCQUFBO0lBQUE1RSxHQUFBO0lBQUFFLEtBQUEsRUFDeEMsU0FBQXVYLDBDQUFpRHRELGNBQThCLEVBQXNCO01BQ25HLFFBQVFBLGNBQWM7UUFDcEIsS0FBS3RCLHFFQUFrQjtVQUNyQixPQUFPLEtBQUs7UUFDZCxLQUFLQSwyRUFBd0I7VUFDM0IsT0FBTyxXQUFXO1FBQ3BCLEtBQUtBLHFFQUFrQjtVQUNyQixPQUFPLEtBQUs7UUFDZDtVQUNFdkYsZ0VBQWlCLENBQUM2RyxjQUFjLENBQUM7TUFDckM7SUFDRjtFQUFDO0lBQUFuVSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd1gsMENBQWlEQyxrQkFBc0MsRUFBa0I7TUFDdkcsUUFBUUEsa0JBQWtCO1FBQ3hCLEtBQUssS0FBSztVQUNSLE9BQU85RSxxRUFBa0I7UUFDM0IsS0FBSyxXQUFXO1VBQ2QsT0FBT0EsMkVBQXdCO1FBQ2pDLEtBQUssS0FBSztVQUNSLE9BQU9BLHFFQUFrQjtRQUMzQjtVQUNFdkYsZ0VBQWlCLENBQUNxSyxrQkFBa0IsQ0FBQztNQUN6QztJQUNGO0VBQUM7RUFBQSxPQUFBL1MscUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBO0FBQ3lEO0FBQ007QUFBQSxJQUUxQ0MsZ0JBQWdCO0VBQUEsU0FBQUEsaUJBQUE7SUFBQXhGLDJJQUFBLE9BQUF3RixnQkFBQTtFQUFBO0VBQUE5RSx3SUFBQSxDQUFBOEUsZ0JBQUE7SUFBQTdFLEdBQUE7SUFBQUMsR0FBQSxFQUNuQyxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU80Uyx5RUFBYyxDQUFDbkksMkVBQXlCLENBQUM7SUFDbEQ7RUFBQztFQUFBLE9BQUE3RixnQkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1RIO0FBQ0E7QUFDQTtBQUM4QztBQUFBLElBRXhDK1MsT0FBTztFQVNYLFNBQUFBLFFBQVlDLFFBQVEsRUFBRTtJQUFBeFksMklBQUEsT0FBQXVZLE9BQUE7SUFBQXRZLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQ3BCLElBQUksRUFBRSxJQUFJLFlBQVlzWSxPQUFPLENBQUMsRUFBRTtNQUM5QixNQUFNLElBQUlFLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQztJQUM3RDtJQUVBLElBQUksT0FBT0QsUUFBUSxLQUFLLFVBQVUsRUFBRTtNQUNsQyxNQUFNLElBQUlDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QztJQUVBLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7SUFDZixJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHMVMsU0FBUztJQUN2QixJQUFJLENBQUMyUyxVQUFVLEdBQUcsRUFBRTtJQUVwQixJQUFJLENBQUNDLFNBQVMsQ0FBQ04sUUFBUSxDQUFDO0VBQzFCO0VBQUM5WCx3SUFBQSxDQUFBNlgsT0FBQTtJQUFBNVgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWlZLFVBQVVOLFFBQWtCLEVBQVE7TUFBQSxJQUFBdFgsS0FBQTtNQUNsQyxJQUFJNlgsSUFBSSxHQUFHLEtBQUs7TUFFaEIsSUFBSTtRQUNGUCxRQUFRLENBQ04sVUFBQTNYLEtBQUssRUFBSTtVQUNQLElBQUlrWSxJQUFJLEVBQUU7WUFDUjtVQUNGO1VBRUFBLElBQUksR0FBRyxJQUFJO1VBQ1g3WCxLQUFJLENBQUM4WCxjQUFjLENBQUNuWSxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUNELFVBQUFvWSxNQUFNLEVBQUk7VUFDUixJQUFJRixJQUFJLEVBQUU7WUFDUjtVQUNGO1VBRUFBLElBQUksR0FBRyxJQUFJO1VBQ1g3WCxLQUFJLENBQUNnWSxhQUFhLENBQUNELE1BQU0sQ0FBQztRQUM1QixDQUNGLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBTzlPLEtBQUssRUFBRTtRQUNkLElBQUk0TyxJQUFJLEVBQUU7VUFDUjtRQUNGO1FBRUFBLElBQUksR0FBRyxJQUFJO1FBQ1gsSUFBSSxDQUFDRyxhQUFhLENBQUMvTyxLQUFLLENBQUM7TUFDM0I7SUFDRjtFQUFDO0lBQUF4SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbVksZUFBZUcsUUFBNkIsRUFBUTtNQUNsRCxJQUFNQyxPQUFPLEdBQUcsSUFBZTtNQUUvQixJQUFJO1FBQ0Y7UUFDQSxJQUFJRCxRQUFRLEtBQUtDLE9BQU8sRUFBRTtVQUN4QixNQUFNLElBQUlYLFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQztRQUNuRTtRQUVBLElBQUlVLFFBQVEsS0FBSzdYLG1JQUFBLENBQU82WCxRQUFRLE1BQUssUUFBUSxJQUFJLE9BQU9BLFFBQVEsS0FBSyxVQUFVLENBQUMsRUFBRTtVQUNoRixJQUFNeEIsS0FBSSxHQUFHd0IsUUFBUSxDQUFDeEIsSUFBSTtVQUUxQixJQUFJd0IsUUFBUSxZQUFZWixPQUFPLEVBQUU7WUFDL0JhLE9BQU8sQ0FBQ1YsTUFBTSxHQUFHLENBQUM7WUFDbEJVLE9BQU8sQ0FBQ1IsTUFBTSxHQUFHTyxRQUFRO1lBQ3pCQyxPQUFPLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1lBRWhCO1VBQ0YsQ0FBQyxNQUFNLElBQUksT0FBTzFCLEtBQUksS0FBSyxVQUFVLEVBQUU7WUFDckN5QixPQUFPLENBQUNOLFNBQVMsQ0FBQyxZQUFpQjtjQUNqQztjQUNBbkIsS0FBSSxDQUFDTixLQUFLLENBQUM4QixRQUFRLEVBQUV4SixTQUFTLENBQUM7WUFDakMsQ0FBQyxDQUFDO1lBRUY7VUFDRjtRQUNGO1FBRUF5SixPQUFPLENBQUNWLE1BQU0sR0FBRyxDQUFDO1FBQ2xCVSxPQUFPLENBQUNSLE1BQU0sR0FBR08sUUFBUTtRQUN6QkMsT0FBTyxDQUFDQyxNQUFNLENBQUMsQ0FBQztNQUNsQixDQUFDLENBQUMsT0FBT3pPLENBQUMsRUFBRTtRQUNWd08sT0FBTyxDQUFDRixhQUFhLENBQUN0TyxDQUFDLENBQUM7TUFDMUI7SUFDRjtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcVksY0FBY0MsUUFBNkIsRUFBUTtNQUNqRCxJQUFJLENBQUNULE1BQU0sR0FBRyxDQUFDO01BQ2YsSUFBSSxDQUFDRSxNQUFNLEdBQUdPLFFBQVE7TUFDdEIsSUFBSSxDQUFDRSxNQUFNLENBQUMsQ0FBQztJQUNmO0VBQUM7SUFBQTFZLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3WSxPQUFBLEVBQWU7TUFBQSxJQUFBblgsTUFBQTtNQUNiLElBQUksSUFBSSxDQUFDd1csTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUNHLFVBQVUsQ0FBQ3JPLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckQrTixPQUFPLENBQUNlLFVBQVUsQ0FBQyxZQUFNO1VBQ3ZCLElBQUksQ0FBQ3BYLE1BQUksQ0FBQ3lXLFFBQVEsRUFBRTtZQUNsQkosT0FBTyxDQUFDZ0IsbUJBQW1CLENBQUNyWCxNQUFJLENBQUMwVyxNQUFNLENBQUM7VUFDMUM7UUFDRixDQUFDLENBQUM7TUFDSjtNQUVBLEtBQUssSUFBSVksQ0FBQyxHQUFHLENBQUMsRUFBRUMsR0FBRyxHQUFHLElBQUksQ0FBQ1osVUFBVSxDQUFDck8sTUFBTSxFQUFFZ1AsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO1FBQzFELElBQUksQ0FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQ2IsVUFBVSxDQUFDVyxDQUFDLENBQUMsQ0FBQztNQUNqQztNQUVBLElBQUksQ0FBQ1gsVUFBVSxHQUFHLElBQUk7SUFDeEI7RUFBQztJQUFBbFksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZZLE9BQU9DLFFBQXdCLEVBQVE7TUFDckMsSUFBSVAsT0FBTyxHQUFHLElBQWU7TUFFN0IsT0FBT0EsT0FBTyxDQUFDVixNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzNCVSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ1IsTUFBTTtNQUMxQjtNQUVBLElBQUlRLE9BQU8sQ0FBQ1YsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QlUsT0FBTyxDQUFDUCxVQUFVLENBQUN0UCxJQUFJLENBQUNvUSxRQUFRLENBQUM7UUFFakM7TUFDRjtNQUVBUCxPQUFPLENBQUNULFFBQVEsR0FBRyxJQUFJO01BQ3ZCSixPQUFPLENBQUNlLFVBQVUsQ0FBQyxZQUFNO1FBQ3ZCLElBQU1kLFFBQVEsR0FBR1ksT0FBTyxDQUFDVixNQUFNLEtBQUssQ0FBQyxHQUFHaUIsUUFBUSxDQUFDQyxXQUFXLEdBQUdELFFBQVEsQ0FBQ0UsVUFBVTtRQUVsRixJQUFJckIsUUFBUSxLQUFLLElBQUksRUFBRTtVQUNyQixJQUFJWSxPQUFPLENBQUNWLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEJpQixRQUFRLENBQUNQLE9BQU8sQ0FBQ0osY0FBYyxDQUFDSSxPQUFPLENBQUNSLE1BQU0sQ0FBQztVQUNqRCxDQUFDLE1BQU07WUFDTGUsUUFBUSxDQUFDUCxPQUFPLENBQUNGLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDUixNQUFNLENBQUM7VUFDaEQ7VUFFQTtRQUNGO1FBRUEsSUFBSWtCLE1BQU07UUFFVixJQUFJO1VBQ0ZBLE1BQU0sR0FBR3RCLFFBQVEsQ0FBQ1ksT0FBTyxDQUFDUixNQUFNLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU9oTyxDQUFDLEVBQUU7VUFDVitPLFFBQVEsQ0FBQ1AsT0FBTyxDQUFDRixhQUFhLENBQUN0TyxDQUFDLENBQUM7VUFFakM7UUFDRjtRQUVBK08sUUFBUSxDQUFDUCxPQUFPLENBQUNKLGNBQWMsQ0FBQ2MsTUFBTSxDQUFDO01BQ3pDLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQW5aLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFrWixJQUFXQyxHQUFtQixFQUFXO01BQ3ZDLE9BQU8sSUFBSXpCLE9BQU8sQ0FBQyxVQUFDMEIsT0FBTyxFQUFFQyxNQUFNLEVBQUs7UUFDdEMsSUFBSSxDQUFDdE0sS0FBSyxDQUFDdU0sT0FBTyxDQUFDSCxHQUFHLENBQUMsRUFBRTtVQUN2QixPQUFPRSxNQUFNLENBQUMsSUFBSXpCLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzlEO1FBRUEsSUFBTTdJLElBQUksR0FBR2hDLEtBQUssQ0FBQ3JCLFNBQVMsQ0FBQ21MLEtBQUssQ0FBQ3pWLElBQUksQ0FBQytYLEdBQUcsQ0FBQztRQUU1QyxJQUFJcEssSUFBSSxDQUFDcEYsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUNyQixPQUFPeVAsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQjtRQUVBLElBQUlHLFNBQVMsR0FBR3hLLElBQUksQ0FBQ3BGLE1BQU07UUFDM0IsSUFBTTZQLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSWIsQ0FBQyxFQUFFM1ksS0FBSyxFQUFXO1VBQ3pDLElBQUk7WUFDRixJQUFJQSxLQUFLLEtBQUtTLG1JQUFBLENBQU9ULEtBQUssTUFBSyxRQUFRLElBQUksT0FBT0EsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUFFO2NBQ3ZFLElBQU04VyxNQUFJLEdBQUc5VyxLQUFLLENBQUM4VyxJQUFJO2NBRXZCLElBQUksT0FBT0EsTUFBSSxLQUFLLFVBQVUsRUFBRTtnQkFDOUJBLE1BQUksQ0FBQzFWLElBQUksQ0FDUHBCLEtBQUssRUFDTCxVQUFBQSxLQUFLO2tCQUFBLE9BQUl3WixjQUFjLENBQUNiLENBQUMsRUFBRTNZLEtBQUssQ0FBQztnQkFBQSxHQUNqQ3FaLE1BQ0YsQ0FBQztnQkFFRDtjQUNGO1lBQ0Y7WUFFQXRLLElBQUksQ0FBQzRKLENBQUMsQ0FBQyxHQUFHM1ksS0FBSztZQUVmLElBQUksRUFBRXVaLFNBQVMsS0FBSyxDQUFDLEVBQUU7Y0FDckJILE9BQU8sQ0FBQ3JLLElBQUksQ0FBQztZQUNmO1VBQ0YsQ0FBQyxDQUFDLE9BQU96RixLQUFLLEVBQUU7WUFDZCtQLE1BQU0sQ0FBQy9QLEtBQUssQ0FBQztVQUNmO1FBQ0YsQ0FBQztRQUVELEtBQUssSUFBSXFQLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzVKLElBQUksQ0FBQ3BGLE1BQU0sRUFBRWdQLENBQUMsRUFBRSxFQUFFO1VBQ3BDYSxjQUFjLENBQUNiLENBQUMsRUFBRTVKLElBQUksQ0FBQzRKLENBQUMsQ0FBQyxDQUFDO1FBQzVCO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBN1ksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW9aLFFBQWVwWixLQUFLLEVBQVc7TUFDN0IsSUFBSUEsS0FBSyxJQUFJUyxtSUFBQSxDQUFPVCxLQUFLLE1BQUssUUFBUSxJQUFJQSxLQUFLLENBQUN5WixXQUFXLEtBQUsvQixPQUFPLEVBQUU7UUFDdkUsT0FBTzFYLEtBQUs7TUFDZDtNQUVBLE9BQU8sSUFBSTBYLE9BQU8sQ0FBQyxVQUFBMEIsT0FBTztRQUFBLE9BQUlBLE9BQU8sQ0FBQ3BaLEtBQUssQ0FBQztNQUFBLEVBQUM7SUFDL0M7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcVosT0FBY3JaLEtBQUssRUFBVztNQUM1QixPQUFPLElBQUkwWCxPQUFPLENBQUMsVUFBQ2dDLENBQUMsRUFBRUwsTUFBTTtRQUFBLE9BQUtBLE1BQU0sQ0FBQ3JaLEtBQUssQ0FBQztNQUFBLEVBQUM7SUFDbEQ7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMlosS0FBWVIsR0FBbUIsRUFBVztNQUN4QyxPQUFPLElBQUl6QixPQUFPLENBQUMsVUFBQzBCLE9BQU8sRUFBRUMsTUFBTSxFQUFLO1FBQ3RDLElBQUksQ0FBQ3RNLEtBQUssQ0FBQ3VNLE9BQU8sQ0FBQ0gsR0FBRyxDQUFDLEVBQUU7VUFDdkIsT0FBT0UsTUFBTSxDQUFDLElBQUl6QixTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUMvRDtRQUVBLEtBQUssSUFBSWUsQ0FBQyxHQUFHLENBQUMsRUFBRUMsR0FBRyxHQUFHTyxHQUFHLENBQUN4UCxNQUFNLEVBQUVnUCxDQUFDLEdBQUdDLEdBQUcsRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDOUNqQixPQUFPLENBQUMwQixPQUFPLENBQUNELEdBQUcsQ0FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQzdCLElBQUksQ0FBQ3NDLE9BQU8sRUFBRUMsTUFBTSxDQUFDO1FBQy9DO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBdlosR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXlZLFdBQWtCZCxRQUFrQixFQUFRO01BQzFDLElBQU14QyxPQUFPLEdBQUd0UCxVQUFVLENBQUM4UixRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDO0VBQUM7SUFBQTdYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwWSxvQkFBMkJwUCxLQUFLLEVBQVE7TUFDdEMsSUFBSSxPQUFPaUYsT0FBTyxLQUFLLFdBQVcsSUFBSUEsT0FBTyxFQUFFO1FBQzdDQSxPQUFPLENBQUNpQixJQUFJLENBQUMsdUNBQXVDLEVBQUVsRyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ2hFO0lBQ0Y7RUFBQztFQUFBLE9BQUFvTyxPQUFBO0FBQUE7QUFHSEEsT0FBTyxDQUFDaE0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFVBQVNzTixVQUFvQixFQUFrQjtFQUMxRSxPQUFPLElBQUksQ0FBQ2xDLElBQUksQ0FBQyxJQUFJLEVBQUVrQyxVQUFVLENBQUM7QUFDcEMsQ0FBQztBQUVEdEIsT0FBTyxDQUFDaE0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFVBQVNxTixXQUFxQixFQUFFQyxVQUFvQixFQUFrQjtFQUNoRyxJQUFNVCxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUNrQixXQUFXLENBQUM7SUFBQSxPQUFNLElBQUk7RUFBQSxFQUFDO0VBRWhELElBQUksQ0FBQ1osTUFBTSxDQUFDLElBQUllLG9EQUFjLENBQUNiLFdBQVcsRUFBRUMsVUFBVSxFQUFFVCxPQUFPLENBQUMsQ0FBQztFQUVqRSxPQUFPQSxPQUFPO0FBQ2hCLENBQUM7QUFFRGIsT0FBTyxDQUFDaE0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVNpTSxRQUFrQixFQUFrQjtFQUMxRSxJQUFNOEIsV0FBVyxHQUFHLElBQUksQ0FBQ0EsV0FBVztFQUVwQyxPQUFPLElBQUksQ0FBQzNDLElBQUksQ0FDZCxVQUFBOVcsS0FBSztJQUFBLE9BQUl5WixXQUFXLENBQUNMLE9BQU8sQ0FBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ2IsSUFBSSxDQUFDO01BQUEsT0FBTTlXLEtBQUs7SUFBQSxFQUFDO0VBQUEsR0FDMUQsVUFBQW9ZLE1BQU07SUFBQSxPQUFJcUIsV0FBVyxDQUFDTCxPQUFPLENBQUN6QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNiLElBQUksQ0FBQztNQUFBLE9BQU0yQyxXQUFXLENBQUNKLE1BQU0sQ0FBQ2pCLE1BQU0sQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUNsRixDQUFDO0FBQ0gsQ0FBQztBQUVELCtEQUFlVixPQUFPLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdlF0QjtBQUNBO0FBQ0E7QUFGQSxJQUtxQmtDLGNBQWMsZ0JBQUEvWix3SUFBQSxDQUtqQyxTQUFBK1osZUFBWWIsV0FBVyxFQUFFQyxVQUFVLEVBQUVULE9BQU8sRUFBRTtFQUFBcFosMklBQUEsT0FBQXlhLGNBQUE7RUFBQXhhLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQzVDLElBQUksQ0FBQzJaLFdBQVcsR0FBRyxPQUFPQSxXQUFXLEtBQUssVUFBVSxHQUFHQSxXQUFXLEdBQUcsSUFBSTtFQUN6RSxJQUFJLENBQUNDLFVBQVUsR0FBRyxPQUFPQSxVQUFVLEtBQUssVUFBVSxHQUFHQSxVQUFVLEdBQUcsSUFBSTtFQUN0RSxJQUFJLENBQUNULE9BQU8sR0FBR0EsT0FBTztBQUN4QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEg7QUFDQTtBQUNBO0FBQ29EO0FBRWhCO0FBQzZCO0FBR1M7QUFBQSxJQVNyRHNCLHFCQUFxQiwwQkFBQUMsa0NBQUEsRUFBQUMsMEJBQUE7RUF1RXhDLFNBQUFGLHNCQUFBLEVBQXNCO0lBQUExYSwySUFBQSxPQUFBMGEscUJBQUE7SUFDcEIsTUFBTSxJQUFJdFUsS0FBSyxDQUFDLHNFQUFzRSxDQUFDO0VBQ3pGO0VBQUMxRix3SUFBQSxDQUFBZ2EscUJBQUE7SUFBQS9aLEdBQUE7SUFBQUMsR0FBQSxFQWpFRCxTQUFBQSxJQUFBLEVBQW9FO01BQ2xFLE9BQU84WixxQkFBcUIsQ0FBQ0csc0JBQXNCO0lBQ3JEO0VBQUM7SUFBQWxhLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpYSwwQkFBQSxFQUF5QztNQUN2QyxJQUFJeFUsdUZBQXFDLEVBQUU7UUFDekMsSUFBTTBQLE9BQU8sR0FBRzBFLHFCQUFxQixDQUFDSyxpQ0FBaUMsQ0FBQyxDQUFDLENBQ3RFOUMsS0FBSyxDQUFDLFVBQUFyTixDQUFDO1VBQUEsT0FBSThQLHFCQUFxQixDQUFDaFIsT0FBTyxDQUFDUyxLQUFLLENBQUMsMkNBQTJDLEVBQUVTLENBQUMsQ0FBQztRQUFBLEVBQUM7TUFDcEc7SUFDRjtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsV0FBQWthLGtDQUFBO01BQUEsUUFBQUosa0NBQUEsR0FBQUEsa0NBQUEsSUFBQXhFLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBQTtRQUFBLE9BQUFELDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBQ1N3RCxxQkFBcUIsQ0FBQ00sT0FBTyxHQUFHO2dCQUNyQ0MsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCQyxjQUFjLEVBQUVSLHFCQUFxQixDQUFDUyx5QkFBeUIsQ0FBQyxDQUFDLENBQzlEbEQsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7a0JBQ1Y4UCxxQkFBcUIsQ0FBQ00sT0FBTyxHQUFHLElBQUk7a0JBRXBDLE1BQU1wUSxDQUFDO2dCQUNULENBQUM7Y0FDTCxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE2TCxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNGLElBQUFnQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUFzYSwwQkFBQTtNQUFBLFFBQUFQLDBCQUFBLEdBQUFBLDBCQUFBLElBQUF6RSw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFnRixTQUFBO1FBQUEsSUFBQWxELElBQUE7UUFBQSxJQUFBK0MsU0FBQTtVQUFBSSx3QkFBQTtVQUFBeGEsS0FBQTtVQUFBeWEsYUFBQTtVQUFBQyxNQUFBLEdBQUE1TCxTQUFBO1FBQUEsT0FBQXlHLDJJQUFBLFVBQUFvRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQTlFLElBQUE7WUFBQTtjQUF1Q3NFLFNBQXFDLEdBQUFNLE1BQUEsQ0FBQS9RLE1BQUEsUUFBQStRLE1BQUEsUUFBQXJWLFNBQUEsR0FBQXFWLE1BQUEsTUFBRyxVQUFVO2NBQUVGLHdCQUF3QixHQUFBRSxNQUFBLENBQUEvUSxNQUFBLFFBQUErUSxNQUFBLFFBQUFyVixTQUFBLEdBQUFxVixNQUFBLE1BQUcsS0FBSztjQUFBLE1BQ3JIYixxQkFBcUIsQ0FBQ00sT0FBTyxJQUFJTixxQkFBcUIsQ0FBQ00sT0FBTyxDQUFDQyxTQUFTLEtBQUtBLFNBQVMsSUFBSSxDQUFDSSx3QkFBd0I7Z0JBQUFJLFNBQUEsQ0FBQTlFLElBQUE7Z0JBQUE7Y0FBQTtjQUMvRzlWLEtBQUssR0FBRzZaLHFCQUFxQixDQUFDTSxPQUFPLENBQUNFLGNBQWM7Y0FFMURSLHFCQUFxQixDQUFDTSxPQUFPLEdBQUcsSUFBSTtjQUFDLE9BQUFTLFNBQUEsQ0FBQXZFLE1BQUEsV0FFOUJyVyxLQUFLO1lBQUE7Y0FHUnlhLGFBQStCLEdBQUc7Z0JBQUNELHdCQUF3QixFQUF4QkE7Y0FBd0IsQ0FBQztjQUFBLE9BQUFJLFNBQUEsQ0FBQXZFLE1BQUEsV0FFM0R3RCxxQkFBcUIsQ0FBQ0csc0JBQXNCLENBQUNoYSxLQUFLLENBQUM2YSxvQkFBb0IsQ0FBQ0osYUFBYSxDQUFDLENBQzFGM0QsSUFBSSxXQUFBekIsRUFBQTtnQkFBQSxRQUFBZ0MsSUFBQSxHQUFBQSxJQUFBLElBQUEvQiw2SUFBQSxlQUFBQywySUFBQSxDQUFDLFNBQUFrQixTQUFNNEQsY0FBYztrQkFBQSxJQUFBUyxzQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxPQUFBO2tCQUFBLE9BQUExRiwySUFBQSxVQUFBbUIsVUFBQUMsU0FBQTtvQkFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtzQkFBQTt3QkFDbEJnRixzQkFBc0IsR0FBR1QsY0FBYyxDQUFDUyxzQkFBc0I7d0JBQUEsS0FHaEVBLHNCQUFzQjswQkFBQW5FLFNBQUEsQ0FBQWIsSUFBQTswQkFBQTt3QkFBQTt3QkFDeEJrRixnQkFBZ0IsR0FBR1gsY0FBYyxDQUFDYSxjQUFjLENBQUMsT0FBTyxFQUFFOzBCQUFDZCxTQUFTLEVBQVRBO3dCQUFTLENBQUMsQ0FBQzt3QkFDdEVXLGdCQUFnQixHQUFHVixjQUFjLENBQUNhLGNBQWMsQ0FBQyxPQUFPLEVBQUU7MEJBQUNkLFNBQVMsRUFBVEE7d0JBQVMsQ0FBQyxDQUFDO3dCQUFDekQsU0FBQSxDQUFBd0UsRUFBQSxHQUdyRUgsZ0JBQWdCO3dCQUFBckUsU0FBQSxDQUFBeUUsRUFBQSxHQUNoQkwsZ0JBQWdCO3dCQUFBcEUsU0FBQSxDQUFBMEUsRUFBQSxHQUNBaEIsY0FBYzt3QkFBQTFELFNBQUEsQ0FBQWIsSUFBQTt3QkFBQSxPQUNadUUsY0FBYyxDQUFDaUIsV0FBVyxDQUFDalcsU0FBUyxDQUFDO3NCQUFBO3dCQUFBc1IsU0FBQSxDQUFBNEUsRUFBQSxHQUFBNUUsU0FBQSxDQUFBTCxJQUFBO3dCQUFBLE9BQUFLLFNBQUEsQ0FBQU4sTUFBQTswQkFIdkQyRSxnQkFBZ0IsRUFBQXJFLFNBQUEsQ0FBQXdFLEVBQUE7MEJBQ2hCSixnQkFBZ0IsRUFBQXBFLFNBQUEsQ0FBQXlFLEVBQUE7MEJBQ2hCZixjQUFjLEVBQUExRCxTQUFBLENBQUEwRSxFQUFBOzBCQUNkRyxVQUFVLEVBQUE3RSxTQUFBLENBQUE0RTt3QkFBQTtzQkFBQTt3QkFJUk4sT0FBTyxHQUFHYixTQUFTLEtBQUssVUFBVSxHQUFHOzBCQUN6Q3FCLG1CQUFtQixFQUFFLElBQUk7MEJBQ3pCQyxtQkFBbUIsRUFBRTt3QkFDdkIsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFBQS9FLFNBQUEsQ0FBQWdGLEVBQUEsR0FHWXRCLGNBQWM7d0JBQUExRCxTQUFBLENBQUFiLElBQUE7d0JBQUEsT0FDWnVFLGNBQWMsQ0FBQ2lCLFdBQVcsQ0FBQ0wsT0FBTyxDQUFDO3NCQUFBO3dCQUFBdEUsU0FBQSxDQUFBaUYsRUFBQSxHQUFBakYsU0FBQSxDQUFBTCxJQUFBO3dCQUFBLE9BQUFLLFNBQUEsQ0FBQU4sTUFBQTswQkFEckRnRSxjQUFjLEVBQUExRCxTQUFBLENBQUFnRixFQUFBOzBCQUNkSCxVQUFVLEVBQUE3RSxTQUFBLENBQUFpRjt3QkFBQTtzQkFBQTtzQkFBQTt3QkFBQSxPQUFBakYsU0FBQSxDQUFBSixJQUFBO29CQUFBO2tCQUFBLEdBQUFFLFFBQUE7Z0JBQUEsQ0FFYixJQUFBRCxLQUFBLE9BQUExSCxTQUFBO2NBQUEsRUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBOEwsU0FBQSxDQUFBckUsSUFBQTtVQUFBO1FBQUEsR0FBQWdFLFFBQUE7TUFBQSxDQUNMLElBQUEvRCxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtFQUFBLE9BQUErSyxxQkFBQTtBQUFBO0FBQUF6YSwySUFBQSxDQXJFa0J5YSxxQkFBcUIsYUFDTm5TLG9FQUF1QixDQUFDLHVCQUF1QixDQUFDO0FBQUF0SSwySUFBQSxDQUQvRHlhLHFCQUFxQiw0QkFFMEMsSUFBSXBhLGdEQUFPLENBQXlCLElBQUlvYyxrRUFBNEIsQ0FBQyxDQUFDLENBQUM7QUFBQXpjLDJJQUFBLENBRnRJeWEscUJBQXFCO0FBQUE7QUE0RTFDQSxxQkFBcUIsQ0FBQ0kseUJBQXlCLENBQUMsQ0FBQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlGakQ7QUFDQTtBQUNBO0FBRkEsSUFHcUI2Qix1QkFBdUI7RUEyQjFDLFNBQUFBLHdCQUFBLEVBQXNCO0lBQUEzYywySUFBQSxPQUFBMmMsdUJBQUE7SUFDcEIsTUFBTSxJQUFJdlcsS0FBSyxDQUFDLHdFQUF3RSxDQUFDO0VBQzNGO0VBQUMxRix3SUFBQSxDQUFBaWMsdUJBQUE7SUFBQWhjLEdBQUE7SUFBQUUsS0FBQSxFQTVCRCxTQUFBK2IsbUJBQTBCdEIsYUFBK0IsRUFBb0I7TUFDM0UsSUFBTXVCLFVBQTBCLEdBQUcsRUFBRTtNQUVyQyxLQUFLLElBQUlyRCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUc4QixhQUFhLENBQUN1QixVQUFVLENBQUNyUyxNQUFNLEVBQUVnUCxDQUFDLEVBQUUsRUFBRTtRQUN4RCxJQUFNc0QsSUFBYyxHQUFHLEVBQUU7UUFFekIsS0FBSyxJQUFJNUwsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxFQUFFLEVBQUU7VUFDdEMsSUFBTTBDLEdBQUcsR0FBRzBILGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3JELENBQUMsQ0FBQyxDQUFDc0QsSUFBSSxDQUFDNUwsS0FBSyxDQUFDO1VBRW5ELElBQUkwQyxHQUFHLEVBQUU7WUFDUGtKLElBQUksQ0FBQ3ZULElBQUksQ0FBQytSLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3JELENBQUMsQ0FBQyxDQUFDc0QsSUFBSSxDQUFDNUwsS0FBSyxDQUFDLENBQUM7VUFDcEQ7UUFDRjtRQUVBMkwsVUFBVSxDQUFDdFQsSUFBSSxDQUFDO1VBQ2R1VCxJQUFJLEVBQUVBLElBQUk7VUFDVkMsUUFBUSxFQUFFekIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDckQsQ0FBQyxDQUFDLENBQUN1RCxRQUFRO1VBQzlDQyxVQUFVLEVBQUUxQixhQUFhLENBQUN1QixVQUFVLENBQUNyRCxDQUFDLENBQUMsQ0FBQ3dEO1FBQzFDLENBQUMsQ0FBQztNQUNKO01BRUExQixhQUFhLENBQUN1QixVQUFVLEdBQUdBLFVBQVU7TUFFckMsT0FBT3ZCLGFBQWE7SUFDdEI7RUFBQztFQUFBLE9BQUFxQix1QkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Qkg7QUFDQTtBQUNBOztBQUVvQztBQUM2QjtBQUM3QjtBQWdDcEMsSUFBTU0sc0JBQXNCLEdBQUcsSUFBSTtBQUFDLElBRWZDLG9CQUFvQiwwQkFBQUMsZ0JBQUEsRUFBQUMsc0JBQUE7RUFVdkMsU0FBQUYscUJBQVloQyxjQUErQixFQUFFbUMsV0FBd0IsRUFBRUMsc0JBQThCLEVBQUU7SUFBQXRkLDJJQUFBLE9BQUFrZCxvQkFBQTtJQUFBamQsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUEsd0JBTnZDLElBQUlLLGdEQUFPLENBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQUFMLDJJQUFBO0lBQUFBLDJJQUFBLDRCQUV6RSxJQUFJO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBSzlCLElBQUksQ0FBQ3NkLGVBQWUsR0FBR3JDLGNBQWM7SUFDckMsSUFBSSxDQUFDc0MsdUJBQXVCLEdBQUdGLHNCQUFzQjtJQUNyRCxJQUFJLENBQUNHLGdCQUFnQixHQUFHSixXQUFXLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxVQUFBQyxLQUFLO01BQUEsT0FBSUEsS0FBSyxDQUFDbEksSUFBSTtJQUFBLEVBQUMsSUFBSSxFQUFFO0lBRTlFLElBQUksSUFBSSxDQUFDNkgsZUFBZSxFQUFFO01BQ3hCLElBQUksQ0FBQ2pYLDJGQUF5QyxFQUFFO1FBQzlDLElBQU11WCxTQUFTLEdBQUcsSUFBSUMsK0NBQVMsQ0FBQyxJQUFJLENBQUNQLGVBQWUsQ0FBQ1Esd0JBQXdCLENBQUNDLEdBQUcsQ0FBQztRQUVsRixJQUFJLENBQUNDLG9CQUFvQixHQUFHSixTQUFTLENBQUNLLFVBQVU7UUFDaEQsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR04sU0FBUyxDQUFDTyxVQUFVO01BQ2xEO01BRUEsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQztJQUN4QjtFQUNGO0VBQUMzZCx3SUFBQSxDQUFBd2Msb0JBQUE7SUFBQXZjLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUMwZCxhQUFhO0lBQzNCO0VBQUM7SUFBQTNkLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLFFBQUEsRUFBZ0I7TUFDZCxJQUFJLENBQUN1ZCxpQkFBaUIsR0FBRyxLQUFLO01BQzlCLElBQUksQ0FBQ2hCLGVBQWUsR0FBRyxJQUFJO01BRTNCLElBQUksSUFBSSxDQUFDaUIsY0FBYyxFQUFFO1FBQ3ZCQyxZQUFZLENBQUMsSUFBSSxDQUFDRCxjQUFjLENBQUM7UUFDakMsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSTtNQUM1QjtJQUNGO0VBQUM7SUFBQTdkLEdBQUE7SUFBQUUsS0FBQSxXQUFBd2QsZ0JBQUE7TUFBQSxRQUFBbEIsZ0JBQUEsR0FBQUEsZ0JBQUEsSUFBQWhILDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBQTtRQUFBLElBQUFuVixLQUFBO1FBQUEsSUFBQXdkLFFBQUEsRUFBQUMsa0JBQUEsRUFBQTNJLE9BQUE7UUFBQSxPQUFBSSwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLEtBQ01yUSxnR0FBOEM7Z0JBQUFtUSxRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBRixRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUMxQixJQUFJLENBQUNpSSxxQkFBcUIsQ0FBQyxDQUFDO1lBQUE7Y0FBNUM1SSxRQUFPLEdBQUFTLFFBQUEsQ0FBQVUsSUFBQTtjQUFBLE9BQUFWLFFBQUEsQ0FBQVMsTUFBQTtZQUFBO2NBS2Y7Y0FDTXlILGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUluUSxJQUFJO2dCQUFBLE9BQWFBLElBQUksQ0FBQ3FRLEVBQUUsQ0FBQ2hhLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcySixJQUFJLENBQUNxUSxFQUFFLENBQUNoYSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUU7Y0FBQTtjQUFBNFIsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FDckcsSUFBSSxDQUFDNEcsZUFBZSxDQUFDdUIsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUN0RG5ILElBQUksQ0FBQyxVQUFBb0gsS0FBSyxFQUFJO2dCQUNiLElBQU1DLGFBQW1DLEdBQUcsQ0FBQyxDQUFDO2dCQUU5QyxJQUFJRCxLQUFLLEVBQUU7a0JBQ1QsSUFBSUUsYUFBYSxHQUFHL2QsS0FBSSxDQUFDc2MsdUJBQXVCO2tCQUNoRCxJQUFJMEIsMkJBQTJCO2tCQUUvQkgsS0FBSyxDQUFDM1IsT0FBTyxDQUFDLFVBQUErUixNQUFNLEVBQUk7b0JBQ3RCLElBQUlBLE1BQU0sQ0FBQ2xYLElBQUksS0FBSyxnQkFBZ0IsSUFBSWtYLE1BQU0sQ0FBQ0Msb0JBQW9CLEVBQUU7c0JBQ25FSCxhQUFhLEdBQUdFLE1BQU0sQ0FBQ0Msb0JBQW9CLEdBQUcsSUFBSTtzQkFFbEQsSUFBSUosYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQkEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDQyxhQUFhLEdBQUdBLGFBQWE7c0JBQ3REO3NCQUVBLElBQUlELGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0MsYUFBYSxHQUFHQSxhQUFhO3NCQUN0RDtvQkFDRjtvQkFFQSxJQUFJRSxNQUFNLENBQUNsWCxJQUFJLEtBQUssZ0JBQWdCLElBQUlrWCxNQUFNLENBQUNELDJCQUEyQixFQUFFO3NCQUMxRUEsMkJBQTJCLEdBQUdDLE1BQU0sQ0FBQ0QsMkJBQTJCO3NCQUVoRSxJQUFJRixhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzFCQSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNFLDJCQUEyQixHQUFHQSwyQkFBMkI7c0JBQ2xGO3NCQUVBLElBQUlGLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsMkJBQTJCLEdBQUdBLDJCQUEyQjtzQkFDbEY7b0JBQ0Y7b0JBRUEsSUFBSUMsTUFBTSxDQUFDbFgsSUFBSSxLQUFLLGFBQWEsRUFBRTtzQkFDakMsSUFBTXlOLEtBQUksR0FBR3lKLE1BQU0sQ0FBQ3pKLElBQUksSUFBSXlKLE1BQU0sQ0FBQ0UsU0FBUyxJQUFJVixrQkFBa0IsQ0FBQ1EsTUFBTSxDQUFDO3NCQUMxRSxJQUFJRyxLQUFLLEdBQUcsRUFBRTtzQkFFZFAsS0FBSyxDQUFDM1IsT0FBTyxDQUFDLFVBQUFvQixJQUFJLEVBQUk7d0JBQ3BCLElBQUlBLElBQUksQ0FBQ3FRLEVBQUUsS0FBS00sTUFBTSxDQUFDSSxPQUFPLEVBQUU7MEJBQzlCRCxLQUFLLEdBQUc5USxJQUFJLENBQUNnUixRQUFRO3dCQUN2QjtzQkFDRixDQUFDLENBQUM7c0JBRUYsSUFBSTlKLEtBQUksSUFBSXhVLEtBQUksQ0FBQ3VjLGdCQUFnQixDQUFDNVksUUFBUSxDQUFDNlEsS0FBSSxDQUFDLEVBQUU7d0JBQUEsSUFBQStKLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO3dCQUNoRCxJQUFNQyxLQUFLLEdBQUdYLE1BQU0sQ0FBQ1ksYUFBYSxJQUFJLENBQUM7d0JBQ3ZDLElBQU1DLHFCQUFxQixJQUFBUCxxQkFBQSxJQUFBQyxzQkFBQSxHQUFHeGUsS0FBSSxDQUFDb2QsYUFBYSxDQUFDemQsS0FBSyxjQUFBNmUsc0JBQUEsd0JBQUFDLHNCQUFBLEdBQXhCRCxzQkFBQSxDQUEyQmhLLEtBQUksQ0FBQyxjQUFBaUssc0JBQUEsdUJBQWhDQSxzQkFBQSxDQUFrQ0ksYUFBYSxjQUFBTixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLENBQUM7d0JBQ2xGLElBQU1RLFVBQVUsR0FBR0gsS0FBSyxHQUFHRSxxQkFBcUI7d0JBQ2hELElBQU1FLFNBQVMsR0FBR2YsTUFBTSxDQUFDdkosU0FBUyxLQUFBZ0ssc0JBQUEsR0FBRzFlLEtBQUksQ0FBQ29kLGFBQWEsQ0FBQ3pkLEtBQUssY0FBQStlLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF4QkQsc0JBQUEsQ0FBMkJsSyxLQUFJLENBQUMsY0FBQW1LLHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NqSyxTQUFTO3dCQUNoRixJQUFNdUssT0FBTyxHQUFHRixVQUFVLElBQUlDLFNBQVMsR0FBR3pTLElBQUksQ0FBQzJTLEtBQUssQ0FBQyxDQUFDLEdBQUdILFVBQVUsR0FDakVDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUV2QmxCLGFBQWEsQ0FBQ3RKLEtBQUksQ0FBQyxHQUFHOzBCQUNwQjJLLElBQUksRUFBRWxCLE1BQU0sQ0FBQ2tCLElBQUk7MEJBQ2pCaEIsU0FBUyxFQUFFM0osS0FBSTswQkFDZkUsU0FBUyxFQUFFdUosTUFBTSxDQUFDdkosU0FBUzswQkFDM0J1SyxPQUFPLEVBQVBBLE9BQU87MEJBQ1BKLGFBQWEsRUFBRVosTUFBTSxDQUFDWSxhQUFhOzBCQUNuQ08sV0FBVyxFQUFFbkIsTUFBTSxDQUFDbUIsV0FBVzswQkFDL0JDLGVBQWUsRUFBRXBCLE1BQU0sQ0FBQ29CLGVBQWU7MEJBQ3ZDakIsS0FBSyxFQUFFQSxLQUFLLElBQUlwZSxLQUFJLENBQUNzZixjQUFjLENBQUM5SyxLQUFJLENBQUM7MEJBQ3pDdUosYUFBYSxFQUFiQTt3QkFDRixDQUFDO3dCQUVELElBQUlFLE1BQU0sQ0FBQ0QsMkJBQTJCLElBQUlBLDJCQUEyQixFQUFFOzBCQUNyRUYsYUFBYSxDQUFDdEosS0FBSSxDQUFDLENBQUN3SiwyQkFBMkIsR0FBR0MsTUFBTSxDQUFDRCwyQkFBMkIsSUFBSUEsMkJBQTJCO3dCQUNySDt3QkFFQSxJQUFJeEosS0FBSSxLQUFLLE9BQU8sSUFBSXhVLEtBQUksQ0FBQ29kLGFBQWEsQ0FBQ3pkLEtBQUssSUFBSUssS0FBSSxDQUFDb2QsYUFBYSxDQUFDemQsS0FBSyxDQUFDNGYsS0FBSyxFQUFFOzBCQUNsRnpCLGFBQWEsQ0FBQ3RKLEtBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHeUosTUFBTSxDQUFDdUIsYUFBYTswQkFFM0QsSUFBTUMsR0FBRyxHQUFHLENBQUN4QixNQUFNLENBQUN1QixhQUFhLEdBQUd4ZixLQUFJLENBQUNvZCxhQUFhLENBQUN6ZCxLQUFLLENBQUM0ZixLQUFLLENBQUNDLGFBQWEsS0FDN0UxQixhQUFhLENBQUN0SixLQUFJLENBQUMsQ0FBQ0UsU0FBUyxHQUFHMVUsS0FBSSxDQUFDb2QsYUFBYSxDQUFDemQsS0FBSyxDQUFDNGYsS0FBSyxDQUFDN0ssU0FBUyxDQUFDLEdBQzFFLElBQUk7MEJBRU5vSixhQUFhLENBQUN0SixLQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBR2lMLEdBQUcsR0FBR2xULElBQUksQ0FBQ21ULEtBQUssQ0FBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO3dCQUNwRTtzQkFDRjtvQkFDRjtrQkFDRixDQUFDLENBQUM7Z0JBQ0o7Z0JBRUF6ZixLQUFJLENBQUNvZCxhQUFhLENBQUN6ZCxLQUFLLEdBQUdtZSxhQUFhO2NBQzFDLENBQUMsQ0FBQyxDQUFDckgsSUFBSSxDQUFDLFlBQU07Z0JBQ1osSUFBSXpXLEtBQUksQ0FBQ3FkLGlCQUFpQixFQUFFO2tCQUMxQnJkLEtBQUksQ0FBQ3NkLGNBQWMsR0FBR3BjLE1BQU0sQ0FBQ3NFLFVBQVUsQ0FBQztvQkFBQSxPQUFNeEYsS0FBSSxDQUFDbWQsZUFBZSxDQUFDLENBQUM7a0JBQUEsR0FBRXBCLHNCQUFzQixDQUFDO2dCQUMvRjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBdEZFakgsT0FBTyxHQUFBUyxRQUFBLENBQUFVLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0F1RmQsSUFBQWdCLEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsV0FBQStkLHNCQUFBO01BQUEsUUFBQXhCLHNCQUFBLEdBQUFBLHNCQUFBLElBQUFqSCw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrQixTQUFBO1FBQUEsSUFBQXBWLE1BQUE7UUFBQSxJQUFBOFQsT0FBQTtRQUFBLE9BQUFJLDJJQUFBLFVBQUFtQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUFBYSxTQUFBLENBQUFiLElBQUE7Y0FBQSxPQUN3QixJQUFJLENBQUM0RyxlQUFlLENBQUNzRCxjQUFjLENBQUMsQ0FBQyxDQUFDbEosSUFBSSxDQUFDLFVBQUFvSCxLQUFLLEVBQUk7Z0JBQ3hFLElBQU1DLGFBQW1DLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJQyxhQUFhLEdBQUcvYyxNQUFJLENBQUNzYix1QkFBdUI7Z0JBRWhEdUIsS0FBSyxDQUFDakYsTUFBTSxDQUFDLENBQUMsQ0FBQzFNLE9BQU8sQ0FBQyxVQUFBK1IsTUFBTSxFQUFJO2tCQUMvQkEsTUFBTSxDQUFDMkIsS0FBSyxDQUFDLENBQUMsQ0FBQzFULE9BQU8sQ0FBQyxVQUFBcEksSUFBSSxFQUFJO29CQUM3QixJQUFJQSxJQUFJLEtBQUssU0FBUyxFQUFFO3NCQUN0QmlhLGFBQWEsR0FBR0UsTUFBTSxDQUFDNEIsSUFBSSxDQUFDL2IsSUFBSSxDQUFDO29CQUNuQztrQkFDRixDQUFDLENBQUM7a0JBRUYsSUFBSW1hLE1BQU0sQ0FBQ2xYLElBQUksS0FBSyxNQUFNLEVBQUU7b0JBQzFCLElBQU1vWCxTQUFTLEdBQUdGLE1BQU0sQ0FBQzRCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzFULFFBQVEsQ0FBQyxDQUFDO29CQUVyRDJSLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLEdBQUc7c0JBQUN6SixTQUFTLEVBQUV6VixJQUFJLENBQUNDLEdBQUcsQ0FBQztvQkFBQyxDQUFDO29CQUNsRDRlLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUdGLE1BQU0sQ0FBQzRCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzFULFFBQVEsQ0FBQyxDQUFDO29CQUNqRTJSLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUdBLFNBQVM7b0JBQ2pETCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHRixNQUFNLENBQUM0QixJQUFJLENBQUMsZUFBZSxDQUFDO29CQUN4RS9CLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUdGLE1BQU0sQ0FBQzRCLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ3BFL0IsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHRixNQUFNLENBQUM0QixJQUFJLENBQUMsaUJBQWlCLENBQUM7b0JBQzVFL0IsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBR0YsTUFBTSxDQUFDNEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDMVQsUUFBUSxDQUFDLENBQUMsSUFBSW5MLE1BQUksQ0FBQ3NlLGNBQWMsQ0FBQ25CLFNBQVMsQ0FBQztvQkFDN0dMLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUdKLGFBQWE7b0JBRXpELElBQUlJLFNBQVMsS0FBSyxPQUFPLElBQUluZCxNQUFJLENBQUNvYyxhQUFhLENBQUN6ZCxLQUFLLElBQUlxQixNQUFJLENBQUNvYyxhQUFhLENBQUN6ZCxLQUFLLENBQUM0ZixLQUFLLEVBQUU7c0JBQ3ZGekIsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR0YsTUFBTSxDQUFDNEIsSUFBSSxDQUFDLGVBQWUsQ0FBQztzQkFDeEUvQixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUNMLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUNxQixhQUFhLEdBQUd4ZSxNQUFJLENBQUNvYyxhQUFhLENBQUN6ZCxLQUFLLENBQUM0ZixLQUFLLENBQUNDLGFBQWEsS0FDckgxQixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDekosU0FBUyxHQUFHMVQsTUFBSSxDQUFDb2MsYUFBYSxDQUFDemQsS0FBSyxDQUFDNGYsS0FBSyxDQUFDN0ssU0FBUyxDQUFDLEdBQ2pGLElBQUksSUFBSSxDQUFDO29CQUNYO2tCQUNGO2dCQUNGLENBQUMsQ0FBQztnQkFDRjFULE1BQUksQ0FBQ29jLGFBQWEsQ0FBQ3pkLEtBQUssR0FBR21lLGFBQWE7Y0FDMUMsQ0FBQyxDQUFDLENBQUNySCxJQUFJLENBQUMsWUFBTTtnQkFDWixJQUFJelYsTUFBSSxDQUFDcWMsaUJBQWlCLEVBQUU7a0JBQzFCcmMsTUFBSSxDQUFDc2MsY0FBYyxHQUFHcGMsTUFBTSxDQUFDc0UsVUFBVSxDQUFDO29CQUFBLE9BQU14RSxNQUFJLENBQUNtYyxlQUFlLENBQUMsQ0FBQztrQkFBQSxHQUFFcEIsc0JBQXNCLENBQUM7Z0JBQy9GO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FwQ0lqSCxPQUFPLEdBQUF3QixTQUFBLENBQUFMLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQUssU0FBQSxDQUFBSixJQUFBO1VBQUE7UUFBQSxHQUFBRSxRQUFBO01BQUEsQ0FxQ2QsSUFBQUQsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEyZixlQUF1QnZZLElBQVksRUFBVTtNQUMzQyxRQUFRQSxJQUFJO1FBQ1YsS0FBSyxPQUFPO1VBQ1YsT0FBTyxJQUFJLENBQUNnVyxvQkFBb0I7UUFDbEMsS0FBSyxPQUFPO1VBQ1YsT0FBTyxJQUFJLENBQUNFLG9CQUFvQjtRQUNsQztVQUNFLE9BQU8sU0FBUztNQUNwQjtJQUNGO0VBQUM7RUFBQSxPQUFBakIsb0JBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcE9IO0FBQ0E7QUFDQTtBQUZBLElBSXFCWSxTQUFTO0VBTzVCLFNBQUFBLFVBQVlFLEdBQVcsRUFBRTtJQUFBaGUsMklBQUEsT0FBQThkLFNBQUE7SUFBQTdkLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQ3ZCLElBQUksQ0FBQytnQixJQUFJLEdBQUdoRCxHQUFHO0lBRWYsSUFBTWlELGVBQWUsR0FBRyxJQUFJLENBQUNELElBQUksQ0FBQ2hkLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDdkQsSUFBTWtkLGdCQUFnQixHQUFHLElBQUksQ0FBQ0YsSUFBSSxDQUFDaGQsS0FBSyxDQUFDLElBQUksQ0FBQztJQUU5QyxJQUFJLENBQUNtZCxXQUFXLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUMsT0FBTyxFQUFFSCxlQUFlLENBQUM7SUFDNUQsSUFBSSxDQUFDSSxXQUFXLEdBQUcsSUFBSSxDQUFDRCxVQUFVLENBQUMsT0FBTyxFQUFFSCxlQUFlLENBQUM7SUFDNUQsSUFBSSxDQUFDSyxvQkFBb0IsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDLE9BQU8sRUFBRUwsZ0JBQWdCLENBQUM7SUFDaEYsSUFBSSxDQUFDTSxvQkFBb0IsR0FBRyxJQUFJLENBQUNELG9CQUFvQixDQUFDLE9BQU8sRUFBRUwsZ0JBQWdCLENBQUM7RUFDbEY7RUFBQ3hnQix3SUFBQSxDQUFBb2QsU0FBQTtJQUFBbmQsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF5QjtNQUN2QixPQUFPLElBQUksQ0FBQ3VnQixXQUFXO0lBQ3pCO0VBQUM7SUFBQXhnQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlCO01BQ3ZCLE9BQU8sSUFBSSxDQUFDeWdCLFdBQVc7SUFDekI7RUFBQztJQUFBMWdCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUM7TUFDakMsT0FBTyxJQUFJLENBQUMwZ0Isb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTNnQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1DO01BQ2pDLE9BQU8sSUFBSSxDQUFDNGdCLG9CQUFvQjtJQUNsQztFQUFDO0lBQUE3Z0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTBnQixxQkFBNkJ0WixJQUFZLEVBQUVpWixnQkFBMEIsRUFBVztNQUM5RSxJQUFNTyxpQkFBaUIsR0FBR1AsZ0JBQWdCLENBQUNRLElBQUksQ0FBQyxVQUFBQyxRQUFRO1FBQUEsT0FBSUEsUUFBUSxDQUFDOVcsVUFBVSxDQUFDNUMsSUFBSSxDQUFDO01BQUEsRUFBQztNQUV0RixJQUFJLENBQUN3WixpQkFBaUIsRUFBRTtRQUN0QixPQUFPLEtBQUs7TUFDZDtNQUVBLE9BQU8sQ0FBQ0EsaUJBQWlCLENBQUM1YyxRQUFRLGFBQWEsQ0FBQztJQUNsRDtFQUFDO0lBQUFsRSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdWdCLFdBQW1CblosSUFBWSxFQUFFZ1osZUFBMEIsRUFBVTtNQUNuRSxJQUFNVyxhQUFhLEdBQUdYLGVBQWUsQ0FBQ1MsSUFBSSxDQUFDLFVBQUFHLE9BQU87UUFBQSxPQUFJQSxPQUFPLENBQUNoZCxRQUFRLGFBQUFOLE1BQUEsQ0FBYTBjLGVBQWUsQ0FBQ1MsSUFBSSxDQUFDLFVBQUFsSSxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDM1UsUUFBUSxNQUFBTixNQUFBLENBQU0wRCxJQUFJLENBQUUsQ0FBQztRQUFBLEVBQUMsQ0FBQ2pFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO01BQUEsRUFBQztNQUN2SixJQUFNOGQsU0FBUyxHQUFHRixhQUFhLENBQUM1ZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQzdDLElBQU0rZCxTQUFTLEdBQUdELFNBQVMsQ0FBQzlkLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFFekMsT0FBTytkLFNBQVM7SUFDbEI7RUFBQztFQUFBLE9BQUFqRSxTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZESDtBQUNBO0FBQ0E7QUFDb0Q7QUFHYTtBQUFBLElBRzNEa0UscUJBQXFCLDBCQUFBQyxZQUFBLEVBQUFDLGFBQUEsRUFBQUMsb0JBQUEsRUFBQUMscUJBQUE7RUFJekIsU0FBQUosc0JBQVkxRyxhQUFnQyxFQUFFO0lBQUF0YiwySUFBQSxPQUFBZ2lCLHFCQUFBO0lBQUEvaEIsMklBQUEsa0JBSFZzSSxvRUFBdUIsQ0FBQyx1QkFBdUIsQ0FBQztJQUFBdEksMklBQUE7SUFJbEYsSUFBSXFHLGtHQUFnRCxFQUFFO01BQ3BEO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUNpWCxlQUFlLEdBQUcsSUFBSThFLHVCQUF1QixDQUFDL0csYUFBYSxDQUFDO01BRWpFO0lBQ0Y7SUFFQSxJQUFJLENBQUNpQyxlQUFlLEdBQUcsSUFBSStFLGlCQUFpQixDQUFDaEgsYUFBYSxDQUFDO0VBQzdEO0VBQUM1YSx3SUFBQSxDQUFBc2hCLHFCQUFBO0lBQUFyaEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QztNQUNyQyxPQUFPLElBQUksQ0FBQzJjLGVBQWU7SUFDN0I7RUFBQztJQUFBNWMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0RDtNQUMxRCxPQUFPLElBQUksQ0FBQzJjLGVBQWUsQ0FBQ2dGLHVCQUF1QjtJQUNyRDtFQUFDO0lBQUE1aEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2RDtNQUMzRCxPQUFPLElBQUksQ0FBQzJjLGVBQWUsQ0FBQ1Esd0JBQXdCO0lBQ3REO0VBQUM7SUFBQXBkLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUNpRixlQUFlO0lBQzdDO0VBQUM7SUFBQTdoQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU8sSUFBSSxDQUFDMmMsZUFBZSxDQUFDa0Ysa0JBQWtCO0lBQ2hEO0VBQUM7SUFBQTloQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUNtRixnQkFBZ0IsS0FBSyxVQUFVO0lBQ3BFO0VBQUM7SUFBQS9oQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUNvRixnQkFBZ0IsS0FBSyxVQUFVO0lBQ3BFO0VBQUM7SUFBQWhpQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU8sQ0FBQzBGLHlGQUF1QyxJQUFJLE9BQU8sSUFBSSxDQUFDaVgsZUFBZSxDQUFDeEIsY0FBYyxLQUFLLFVBQVU7SUFDOUc7RUFBQztJQUFBcGIsR0FBQTtJQUFBRSxLQUFBLFdBQUFzYixZQUFBakcsRUFBQTtNQUFBLFFBQUErTCxZQUFBLEdBQUFBLFlBQUEsSUFBQTlMLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBa0J5RixPQUF5QjtRQUFBLElBQUE1YSxLQUFBO1FBQUEsT0FBQWtWLDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsS0FDckNyUSxpR0FBK0M7Z0JBQUFtUSxRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQVMsTUFBQSxXQUsxQyxJQUFJcUIsT0FBTyxDQUFDLFVBQUMwQixPQUFPLEVBQUVDLE1BQU07Z0JBQUEsT0FBS2haLEtBQUksQ0FBQ3FjLGVBQWUsQ0FBQ3BCLFdBQVcsQ0FBQ2xDLE9BQU8sRUFBRUMsTUFBTSxFQUFFNEIsT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO2NBQUEsT0FBQXJGLFFBQUEsQ0FBQVMsTUFBQSxXQUc5RixJQUFJLENBQUNxRyxlQUFlLENBQUNwQixXQUFXLENBQUNMLE9BQU8sQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBckYsUUFBQSxDQUFBVyxJQUFBO1VBQUE7UUFBQSxHQUFBZixPQUFBO01BQUEsQ0FDakQsSUFBQWdCLEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsV0FBQStoQixhQUFBQyxHQUFBO01BQUEsUUFBQVgsYUFBQSxHQUFBQSxhQUFBLElBQUEvTCw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrQixTQUFtQndFLE9BQTBCO1FBQUEsSUFBQTVaLE1BQUE7UUFBQSxPQUFBa1UsMklBQUEsVUFBQW1CLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQUEsS0FDdkNyUSxpR0FBK0M7Z0JBQUFrUixTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQU4sTUFBQSxXQUsxQyxJQUFJcUIsT0FBTyxDQUFDLFVBQUMwQixPQUFPLEVBQUVDLE1BQU07Z0JBQUEsT0FBS2hZLE1BQUksQ0FBQ3FiLGVBQWUsQ0FBQ3FGLFlBQVksQ0FBQzNJLE9BQU8sRUFBRUMsTUFBTSxFQUFFNEIsT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO2NBQUEsT0FBQXRFLFNBQUEsQ0FBQU4sTUFBQSxXQUcvRixJQUFJLENBQUNxRyxlQUFlLENBQUNxRixZQUFZLENBQUM5RyxPQUFPLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXRFLFNBQUEsQ0FBQUosSUFBQTtVQUFBO1FBQUEsR0FBQUUsUUFBQTtNQUFBLENBQ2xELElBQUFELEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsV0FBQWlpQixvQkFBQUMsR0FBQTtNQUFBLFFBQUFaLG9CQUFBLEdBQUFBLG9CQUFBLElBQUFoTSw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFnRixTQUEwQjRILFdBQXNDO1FBQUEsT0FBQTVNLDJJQUFBLFVBQUFvRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQTlFLElBQUE7WUFBQTtjQUFBLE9BQUE4RSxTQUFBLENBQUF2RSxNQUFBLFdBQ3ZELElBQUksQ0FBQ3FHLGVBQWUsQ0FBQ3VGLG1CQUFtQixDQUFDeGMsaUdBQStDLEdBQzdGLElBQUkyYyxxQkFBcUIsQ0FBQ0QsV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBdkgsU0FBQSxDQUFBckUsSUFBQTtVQUFBO1FBQUEsR0FBQWdFLFFBQUE7TUFBQSxDQUN4RCxJQUFBL0QsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBcWlCLHFCQUFBQyxHQUFBO01BQUEsUUFBQWYscUJBQUEsR0FBQUEscUJBQUEsSUFBQWpNLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQWdOLFNBQTJCSixXQUFzQztRQUFBLElBQUFLLGdCQUFBO1FBQUEsSUFBQUMsU0FBQTtRQUFBLE9BQUFsTiwySUFBQSxVQUFBbU4sVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE5TSxJQUFBLEdBQUE4TSxTQUFBLENBQUE3TSxJQUFBO1lBQUE7Y0FDekQyTSxTQUFTLElBQUFELGdCQUFBLEdBQUdMLFdBQVcsQ0FBQ2hGLEdBQUcsY0FBQXFGLGdCQUFBLHVCQUFmQSxnQkFBQSxDQUFpQjFmLEtBQUssQ0FBQyxZQUFZLENBQUM7Y0FFdEQsSUFBSTJmLFNBQVMsRUFBRTtnQkFDYixJQUFJLENBQUM1WixPQUFPLENBQUMyRyxJQUFJLENBQUMsK0JBQStCLENBQUM7Y0FDcEQ7Y0FBQyxPQUFBbVQsU0FBQSxDQUFBdE0sTUFBQSxXQUVNLElBQUksQ0FBQ3FHLGVBQWUsQ0FBQzJGLG9CQUFvQixDQUFDNWMsaUdBQStDLEdBQzlGLElBQUkyYyxxQkFBcUIsQ0FBQ0QsV0FBVyxDQUFDLEdBQUdBLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBUSxTQUFBLENBQUFwTSxJQUFBO1VBQUE7UUFBQSxHQUFBZ00sUUFBQTtNQUFBLENBQ3hELElBQUEvTCxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRpQixXQUFBLEVBQTZCO01BQzNCLE9BQU8sSUFBSSxDQUFDbEcsZUFBZSxDQUFDa0csVUFBVSxDQUFDLENBQUM7SUFDMUM7RUFBQztJQUFBOWlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2aUIsYUFBQSxFQUFpQztNQUMvQixPQUFPLElBQUksQ0FBQ25HLGVBQWUsQ0FBQ21HLFlBQVksQ0FBQyxDQUFDO0lBQzVDO0VBQUM7SUFBQS9pQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaWUsU0FBUzZFLFFBQWtDLEVBQTJCO01BQ3BFLE9BQU8sSUFBSSxDQUFDcEcsZUFBZSxDQUFDdUIsUUFBUSxDQUFDNkUsUUFBUSxDQUFDO0lBQ2hEO0VBQUM7SUFBQWhqQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ2dCLGVBQUEsRUFBaUQ7TUFBQSxJQUFBK0MsTUFBQTtNQUMvQyxPQUFPLElBQUlyTCxPQUFPLENBQUMsVUFBQTBCLE9BQU8sRUFBSTtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNakUsT0FBTyxHQUFHNE4sTUFBSSxDQUFDckcsZUFBZSxDQUFDdUIsUUFBUSxDQUFDN0UsT0FBTyxDQUFDO01BQ3hELENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQXRaLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFlLGlCQUFpQnFHLElBQTBCLEVBQUVHLFFBQTRDLEVBQUUwVCxPQUEyQyxFQUFRO01BQzVJLElBQUksQ0FBQ3lCLGVBQWUsQ0FBQzNiLGdCQUFnQixDQUFDcUcsSUFBSSxFQUFFRyxRQUFRLEVBQUUwVCxPQUFPLENBQUM7SUFDaEU7RUFBQztJQUFBbmIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWtCLG9CQUFvQmtHLElBQTBCLEVBQUVHLFFBQTRDLEVBQUUwVCxPQUF3QyxFQUFRO01BQzVJLElBQUksQ0FBQ3lCLGVBQWUsQ0FBQ3hiLG1CQUFtQixDQUFDa0csSUFBSSxFQUFFRyxRQUFRLEVBQUUwVCxPQUFPLENBQUM7SUFDbkU7RUFBQztJQUFBbmIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWtiLGVBQWUvVyxJQUFZLEVBQUU4VyxPQUE4QixFQUFxQjtNQUM5RSxPQUFPLElBQUksQ0FBQ3lCLGVBQWUsQ0FBQ3hCLGNBQWMsQ0FBQy9XLElBQUksRUFBRThXLE9BQU8sQ0FBQztJQUMzRDtFQUFDO0lBQUFuYixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ2pCLFVBQVV4RyxXQUF3QixFQUFRO01BQUEsSUFBQXlHLE1BQUE7TUFDeEN6RyxXQUFXLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUN0USxPQUFPLENBQUMsVUFBQXdRLEtBQUssRUFBSTtRQUN2Q2tHLE1BQUksQ0FBQ3ZHLGVBQWUsQ0FBQ3dHLFFBQVEsQ0FBQ25HLEtBQUssQ0FBQztNQUN0QyxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFqZCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNmhCLGlCQUFBLEVBQXFDO01BQ25DLE9BQU8sSUFBSSxDQUFDbkYsZUFBZSxDQUFDbUYsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRDtFQUFDO0lBQUEvaEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQThoQixpQkFBaUJySCxhQUErQixFQUFRO01BQ3RELElBQUksQ0FBQ2lDLGVBQWUsQ0FBQ29GLGdCQUFnQixDQUFDckgsYUFBYSxDQUFDO0lBQ3REO0VBQUM7SUFBQTNhLEdBQUE7SUFBQUMsR0FBQSxFQU1ELFNBQUFBLElBQUEsRUFBZ0Y7TUFDOUUsT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUN5RyxPQUFPO0lBQ3JDLENBQUM7SUFBQXJRLEdBQUEsRUFORCxTQUFBQSxJQUFZc1EsT0FBeUUsRUFBRTtNQUNyRixJQUFJLENBQUMxRyxlQUFlLENBQUN5RyxPQUFPLEdBQUdDLE9BQU87SUFDeEM7RUFBQztJQUFBdGpCLEdBQUE7SUFBQUMsR0FBQSxFQVVELFNBQUFBLElBQUEsRUFBbUc7TUFDakcsT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUMyRyxjQUFjO0lBQzVDLENBQUM7SUFBQXZRLEdBQUEsRUFORCxTQUFBQSxJQUFtQnNRLE9BQXFGLEVBQUU7TUFDeEcsSUFBSSxDQUFDMUcsZUFBZSxDQUFDMkcsY0FBYyxHQUFHRCxPQUFPO0lBQy9DO0VBQUM7SUFBQXRqQixHQUFBO0lBQUFDLEdBQUEsRUFVRCxTQUFBQSxJQUFBLEVBQTRHO01BQzFHLE9BQU8sSUFBSSxDQUFDMmMsZUFBZSxDQUFDNEcsdUJBQXVCO0lBQ3JELENBQUM7SUFBQXhRLEdBQUEsRUFORCxTQUFBQSxJQUE0QnNRLE9BQXFGLEVBQUU7TUFDakgsSUFBSSxDQUFDMUcsZUFBZSxDQUFDNEcsdUJBQXVCLEdBQUdGLE9BQU87SUFDeEQ7RUFBQztJQUFBdGpCLEdBQUE7SUFBQUMsR0FBQSxFQVVELFNBQUFBLElBQUEsRUFBMkY7TUFDekYsT0FBTyxJQUFJLENBQUMyYyxlQUFlLENBQUM2RywwQkFBMEI7SUFDeEQsQ0FBQztJQUFBelEsR0FBQSxFQU5ELFNBQUFBLElBQStCc1EsT0FBaUUsRUFBRTtNQUNoRyxJQUFJLENBQUMxRyxlQUFlLENBQUM2RywwQkFBMEIsR0FBR0gsT0FBTztJQUMzRDtFQUFDO0lBQUF0akIsR0FBQTtJQUFBRSxLQUFBLEVBTUQsU0FBQXdqQixNQUFBLEVBQWM7TUFDWixJQUFJLENBQUM5RyxlQUFlLENBQUM4RyxLQUFLLENBQUMsQ0FBQztJQUM5QjtFQUFDO0lBQUExakIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksQ0FBQ3VjLGVBQWUsR0FBRyxJQUFJO0lBQzdCO0VBQUM7RUFBQSxPQUFBeUUscUJBQUE7QUFBQTtBQUdILCtEQUFlQSxxQkFBcUIsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0xwQztBQUNBO0FBQ0E7O0FBSTREO0FBQUEsSUFFdER0Riw0QkFBNEIsMEJBQUE0SCxxQkFBQTtFQUFBLFNBQUE1SCw2QkFBQTtJQUFBMWMsMklBQUEsT0FBQTBjLDRCQUFBO0VBQUE7RUFBQWhjLHdJQUFBLENBQUFnYyw0QkFBQTtJQUFBL2IsR0FBQTtJQUFBRSxLQUFBLFdBQUE2YSxxQkFBQXhGLEVBQUE7TUFBQSxRQUFBb08scUJBQUEsR0FBQUEscUJBQUEsSUFBQW5PLDZJQUFBLGVBQUFDLDJJQUFBLENBQ2hDLFNBQUFDLFFBQTJCaUYsYUFBZ0M7UUFBQSxPQUFBbEYsMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxPQUFBRixRQUFBLENBQUFTLE1BQUEsV0FDbEQsSUFBSThLLDJEQUFxQixDQUFDMUcsYUFBYSxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE3RSxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNoRCxJQUFBZ0IsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7RUFBQSxPQUFBK00sNEJBQUE7QUFBQTtBQUdILCtEQUFlQSw0QkFBNEIsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkM0M7QUFDQTtBQUNBO0FBRkEsSUFPcUJsYyxlQUFlO0VBR2xDLFNBQUFBLGdCQUFZK2pCLE9BQW1CLEVBQUU7SUFBQXZrQiwySUFBQSxPQUFBUSxlQUFBO0lBQUFQLDJJQUFBO0lBQy9CLElBQUksQ0FBQ3VrQixRQUFRLEdBQUdELE9BQU87RUFDekI7RUFBQzdqQix3SUFBQSxDQUFBRixlQUFBO0lBQUFHLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBZTtNQUNiLE9BQU8sSUFBSSxDQUFDNGpCLFFBQVEsQ0FBQzNqQixLQUFLO0lBQzVCO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRqQixVQUFVcmMsUUFBcUIsRUFBZTtNQUM1QyxPQUFPLElBQUksQ0FBQ29jLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDcmMsUUFBUSxDQUFDO0lBQzFDO0VBQUM7RUFBQSxPQUFBNUgsZUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwQkg7QUFDQTtBQUNBOztBQUc0QztBQUFBLElBR3RDa2tCLGtCQUFrQiwwQkFBQUMsV0FBQTtFQUFBQyxxSUFBQSxDQUFBRixrQkFBQSxFQUFBQyxXQUFBO0VBQUEsSUFBQUUsTUFBQSxHQUFBQyxZQUFBLENBQUFKLGtCQUFBO0VBQ3RCLFNBQUFBLG1CQUFZSyxTQUFtQixFQUFFM2MsUUFBVyxFQUFFO0lBQUFwSSwySUFBQSxPQUFBMGtCLGtCQUFBO0lBQUEsT0FBQUcsTUFBQSxDQUFBNWlCLElBQUEsT0FDdEMsWUFBTTtNQUNWLElBQU0raUIsR0FBRyxHQUFHRCxTQUFTLENBQUN6Z0IsT0FBTyxDQUFDOEQsUUFBUSxDQUFDO01BRXZDLElBQUk0YyxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ1pELFNBQVMsQ0FBQzNULE1BQU0sQ0FBQzRULEdBQUcsRUFBRSxDQUFDLENBQUM7TUFDMUI7SUFDRixDQUFDO0VBQ0g7RUFBQyxPQUFBdGtCLHdJQUFBLENBQUFna0Isa0JBQUE7QUFBQSxFQVRpQzVpQixxREFBVTtBQUFBLElBWXpCeEIsT0FBTztFQUkxQixTQUFBQSxRQUFZTyxLQUFRLEVBQUU7SUFBQWIsMklBQUEsT0FBQU0sT0FBQTtJQUFBTCwySUFBQTtJQUFBQSwySUFBQTtJQUNwQixJQUFJLENBQUNnbEIsVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDck0sTUFBTSxHQUFHL1gsS0FBSztFQUNyQjtFQUFDSCx3SUFBQSxDQUFBSixPQUFBO0lBQUFLLEdBQUE7SUFBQUMsR0FBQSxFQXdCRCxTQUFBQSxJQUFBLEVBQWU7TUFDYixPQUFPLElBQUksQ0FBQ2dZLE1BQU07SUFDcEIsQ0FBQztJQUFBakYsR0FBQSxFQXhCRCxTQUFBQSxJQUFVOVMsS0FBUSxFQUFFO01BQ2xCLElBQUlxa0IsT0FBTyxHQUFHLElBQUksQ0FBQ3RNLE1BQU0sS0FBSy9YLEtBQUs7TUFFbkMsSUFBSXFrQixPQUFPLElBQUlya0IsS0FBSyxFQUFFO1FBQ3BCLElBQU1za0IsVUFBVSxHQUFHdGtCLEtBQWtDO1FBRXJELElBQUksT0FBT3NrQixVQUFVLENBQUNDLE1BQU0sS0FBSyxVQUFVLEVBQUU7VUFDM0NGLE9BQU8sR0FBRyxDQUFDQyxVQUFVLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUN4TSxNQUFNLENBQUM7UUFDM0M7TUFDRjtNQUVBLElBQUksQ0FBQ3NNLE9BQU8sRUFBRTtRQUNaO01BQ0Y7TUFFQSxJQUFJLENBQUN0TSxNQUFNLEdBQUcvWCxLQUFLO01BRW5CLElBQUksQ0FBQ29rQixVQUFVLENBQUM3WCxPQUFPLENBQUMsVUFBQWhGLFFBQVEsRUFBSTtRQUNsQ0EsUUFBUSxDQUFDdkgsS0FBSyxDQUFDO01BQ2pCLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBTUQsU0FBQTRqQixVQUFVcmMsUUFBcUIsRUFBZTtNQUM1QyxJQUFJLENBQUM2YyxVQUFVLENBQUMxYixJQUFJLENBQUNuQixRQUFRLENBQUM7TUFFOUJBLFFBQVEsQ0FBQyxJQUFJLENBQUN3USxNQUFNLENBQUM7TUFFckIsT0FBTyxJQUFJOEwsa0JBQWtCLENBQWMsSUFBSSxDQUFDTyxVQUFVLEVBQUU3YyxRQUFRLENBQUM7SUFDdkU7RUFBQztFQUFBLE9BQUE5SCxPQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdESDtBQUNBO0FBQ0E7QUFGQSxJQUlxQnFVLFdBQVc7RUFBQSxTQUFBQSxZQUFBO0lBQUEzVSwySUFBQSxPQUFBMlUsV0FBQTtFQUFBO0VBQUFqVSx3SUFBQSxDQUFBaVUsV0FBQTtJQUFBaFUsR0FBQTtJQUFBRSxLQUFBLEVBQzlCLFNBQUF3a0Isc0JBQTZCelIsR0FBVyxFQUFVO01BQ2hELElBQUk7UUFDRixJQUFNMFIsT0FBTyxHQUFHLElBQUl4ZSxHQUFHLENBQUM4TSxHQUFHLENBQUM7UUFFNUIsT0FBTzBSLE9BQU8sQ0FBQ0MsTUFBTTtNQUN2QixDQUFDLENBQUMsT0FBTzNhLENBQUMsRUFBRTtRQUNWLE9BQU8sRUFBRTtNQUNYO0lBQ0Y7RUFBQztFQUFBLE9BQUErSixXQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDYkg7QUFDQTtBQUNBO0FBQ29EO0FBQ2Q7QUFDRjtBQUNnQjtBQUNJO0FBRVE7QUFDUjtBQUNNO0FBQ2lCO0FBQzBCO0FBRW5DO0FBQ047QUFDUDtBQUNKO0FBRXNCO0FBRVY7QUFDdkI7QUFDRjtBQUN3QztBQUM1QjtBQUNHO0FBQ0k7QUFFM0QsSUFBTXJNLFlBQVksR0FBR2xHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSWpDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7QUFBQyxJQWV6RW9JLEdBQUc7RUFpVXRCLFNBQUFBLElBQUEsRUFBc0I7SUFBQXhJLDJJQUFBLE9BQUF3SSxHQUFBO0lBQ3BCLE1BQU0sSUFBSXBDLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztFQUN2RTtFQUFDMUYsd0lBQUEsQ0FBQThILEdBQUE7SUFBQTdILEdBQUE7SUFBQUMsR0FBQSxFQXZTRCxTQUFBQSxJQUFBLEVBQWtDO01BQ2hDLE9BQU8wSCxZQUFZO0lBQ3JCO0VBQUM7SUFBQTNILEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTyxJQUFJLENBQUMwSyxvQkFBb0I7SUFDbEM7RUFBQztJQUFBM0ssR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQztNQUNwQyxPQUFPLElBQUksQ0FBQ3FULFFBQVE7SUFDdEI7RUFBQztJQUFBdFQsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFxQztNQUNuQyxPQUFPNEgsR0FBRyxDQUFDZ2QsZ0JBQWdCO0lBQzdCO0VBQUM7SUFBQTdrQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1DO01BQ2pDLE9BQU80SCxHQUFHLENBQUNpZCxnQkFBZ0I7SUFDN0I7RUFBQztJQUFBOWtCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUQ7TUFDakQsT0FBTzRILEdBQUcsQ0FBQ2tkLG9CQUFvQjtJQUNqQztFQUFDO0lBQUEva0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPNEgsR0FBRyxDQUFDbWQscUJBQXFCO0lBQ2xDO0VBQUM7SUFBQWhsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRFO01BQzFFLE9BQU80SCxHQUFHLENBQUNvZCw4QkFBOEI7SUFDM0M7RUFBQztJQUFBamxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBTzRILEdBQUcsQ0FBQ3FkLDRCQUE0QjtJQUN6QztFQUFDO0lBQUFsbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyRDtNQUN6RCxPQUFPNEgsR0FBRyxDQUFDc2QscUNBQXFDO0lBQ2xEO0VBQUM7SUFBQW5sQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU80SCxHQUFHLENBQUN1ZCw2QkFBNkI7SUFDMUM7RUFBQztJQUFBcGxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEQ7TUFDeEQsT0FBTzRILEdBQUcsQ0FBQ3dkLG9DQUFvQztJQUNqRDtFQUFDO0lBQUFybEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ3FsQixnQ0FBZ0M7SUFDOUM7RUFBQztJQUFBdGxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkQ7TUFDekQsT0FBTyxJQUFJLENBQUNzbEIscUNBQXFDO0lBQ25EO0VBQUM7SUFBQXZsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNEO01BQ3BELE9BQU8sSUFBSSxDQUFDdWxCLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUF4bEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRDtNQUNsRCxPQUFPLElBQUksQ0FBQ3dsQixrQkFBa0I7SUFDaEM7RUFBQztJQUFBemxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUN5bEIsWUFBWTtJQUMxQjtFQUFDO0lBQUExbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE0QztNQUMxQyxPQUFPNEgsR0FBRyxDQUFDOGQsZUFBZTtJQUM1QjtFQUFDO0lBQUEzbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRTtNQUNsRSxPQUFPLElBQUksQ0FBQzJsQiwyQkFBMkI7SUFDekM7RUFBQztJQUFBNWxCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUM0bEIsYUFBYTtJQUMzQjtFQUFDO0lBQUE3bEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRTtNQUNsRSxPQUFPLElBQUksQ0FBQzZsQiwrQ0FBK0M7SUFDN0QsQ0FBQztJQUFBOVMsR0FBQSxFQUVELFNBQUFBLElBQTBEK1MsYUFBcUIsRUFBRTtNQUMvRSxJQUFJLENBQUNELCtDQUErQyxHQUFHQyxhQUFhO0lBQ3RFO0VBQUM7SUFBQS9sQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU82RSx1R0FBeUQsQ0FBQyxJQUFJLENBQUNpRSxPQUFPLENBQUNnRixTQUFTLENBQUM3TixLQUFLLENBQUM7SUFDaEc7RUFBQztJQUFBRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU8yRSwrR0FBK0QsQ0FBQ2lELEdBQUcsQ0FBQ21lLGVBQWUsQ0FBQzlsQixLQUFLLENBQUM7SUFDbkc7RUFBQztJQUFBRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU80QiwwREFBZTtJQUN4QjtFQUFDO0lBQUE3QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK2xCLDRCQUFBLEVBQTJDO01BQUEsSUFBQTFsQixLQUFBO01BQ3pDLElBQU0ybEIsc0JBQXNCLEdBQUd0ZSxpRkFBb0M7TUFFbkVzZSxzQkFBc0IsQ0FBQ3pTLFNBQVMsR0FBRzVMLEdBQUcsQ0FBQ3NlLGVBQWU7TUFFdEQsSUFBTUMsa0JBQWtCLEdBQUd2ZSxHQUFHLENBQUN1TCxZQUFZLENBQUMwUSxTQUFTLENBQUMsVUFBQXpRLFdBQVcsRUFBSTtRQUNuRTZTLHNCQUFzQixDQUFDN1MsV0FBVyxHQUFHQSxXQUFXO01BQ2xELENBQUMsQ0FBQztNQUNGLElBQU1nVCxtQkFBbUIsR0FBR3hlLEdBQUcsQ0FBQ3llLFlBQVksQ0FBQ3hDLFNBQVMsQ0FBQyxVQUFBNWpCLEtBQUssRUFBSTtRQUM5RCxJQUFNcW1CLGlCQUFpQixHQUFHaG1CLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQzRGLFNBQVMsQ0FBQ3pPLEtBQUssQ0FBQzZnQixJQUFJLENBQUMsVUFBQXJULFFBQVE7VUFBQSxPQUFJQSxRQUFRLFlBQVl5RSxpRUFBaUI7UUFBQSxFQUFDO1FBRTlHLElBQUlvVSxpQkFBaUIsRUFBRTtVQUNyQkwsc0JBQXNCLENBQUNqVCxHQUFHLEdBQUcvUyxLQUFLO1VBRWxDSyxLQUFJLENBQUN3SSxPQUFPLENBQUM0RixTQUFTLENBQUNoQixNQUFNLENBQUM0WSxpQkFBaUIsQ0FBQztVQUNoRGhtQixLQUFJLENBQUN3SSxPQUFPLENBQUM0RixTQUFTLENBQUN6TixHQUFHLENBQUMsSUFBSWlSLGlFQUFpQixDQUFDK1Qsc0JBQXNCLENBQUMsQ0FBQztVQUN6RTNsQixLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQywrQkFBK0IsRUFBRWtkLHNCQUFzQixDQUFDalQsR0FBRyxDQUFDO1FBQ2hGO01BQ0YsQ0FBQyxDQUFDO01BQ0YsSUFBTXVULGNBQWMsR0FBRzNlLEdBQUcsQ0FBQ3lMLFFBQVEsQ0FBQ3dRLFNBQVMsQ0FBQyxVQUFBdlEsT0FBTyxFQUFJO1FBQ3ZELElBQU1nVCxpQkFBaUIsR0FBR2htQixLQUFJLENBQUN3SSxPQUFPLENBQUM0RixTQUFTLENBQUN6TyxLQUFLLENBQUM2Z0IsSUFBSSxDQUFDLFVBQUFyVCxRQUFRO1VBQUEsT0FBSUEsUUFBUSxZQUFZeUUsaUVBQWlCO1FBQUEsRUFBQztRQUU5RyxJQUFJb1UsaUJBQWlCLElBQUloVCxPQUFPLEVBQUU7VUFDaEMyUyxzQkFBc0IsQ0FBQzNTLE9BQU8sR0FBR0EsT0FBTztVQUV4Q2hULEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQzRGLFNBQVMsQ0FBQ2hCLE1BQU0sQ0FBQzRZLGlCQUFpQixDQUFDO1VBQ2hEaG1CLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQzRGLFNBQVMsQ0FBQ3pOLEdBQUcsQ0FBQyxJQUFJaVIsaUVBQWlCLENBQUMrVCxzQkFBc0IsQ0FBQyxDQUFDO1VBQ3pFM2xCLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1DQUFtQyxFQUFFa2Qsc0JBQXNCLENBQUMzUyxPQUFPLENBQUM7UUFDeEY7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUF2VCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdW1CLDBCQUFBLEVBQXlDO01BQ3ZDNWUsR0FBRyxDQUFDOGQsZUFBZSxHQUFHalMsK0VBQWdDLENBQUNnVCx1RUFBc0IsQ0FBQztNQUM5RTdlLEdBQUcsQ0FBQzRNLHFCQUFxQixHQUFHNU0sR0FBRyxDQUFDOGQsZUFBZSxDQUFDN1Isb0JBQW9CO01BRXBFak0sR0FBRyxDQUFDNE0scUJBQXFCLENBQUNoQixTQUFTLEdBQUc1TCxHQUFHLENBQUNzZSxlQUFlO01BRXpELElBQU1DLGtCQUFrQixHQUFHdmUsR0FBRyxDQUFDdUwsWUFBWSxDQUFDMFEsU0FBUyxDQUFDLFVBQUF6USxXQUFXLEVBQUk7UUFDbkV4TCxHQUFHLENBQUM0TSxxQkFBcUIsQ0FBQ3BCLFdBQVcsR0FBR0EsV0FBVztNQUNyRCxDQUFDLENBQUM7TUFDRixJQUFNZ1QsbUJBQW1CLEdBQUd4ZSxHQUFHLENBQUN5ZSxZQUFZLENBQUN4QyxTQUFTLENBQUMsVUFBQTVqQixLQUFLLEVBQUk7UUFDOUQySCxHQUFHLENBQUM0TSxxQkFBcUIsQ0FBQ3hCLEdBQUcsR0FBRy9TLEtBQUs7TUFDdkMsQ0FBQyxDQUFDO01BQ0YsSUFBTXNtQixjQUFjLEdBQUczZSxHQUFHLENBQUN5TCxRQUFRLENBQUN3USxTQUFTLENBQUMsVUFBQXZRLE9BQU8sRUFBSTtRQUN2RDFMLEdBQUcsQ0FBQzRNLHFCQUFxQixDQUFDbEIsT0FBTyxHQUFHQSxPQUFPO01BQzdDLENBQUMsQ0FBQztNQUNGLElBQU1yVCxLQUFLLEdBQUcsSUFBSSxDQUFDOFIsNkJBQTZCLENBQUM1TixjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFdkYsSUFBSWxFLEtBQUssRUFBRTtRQUNUd1QsK0VBQWdDLENBQUNiLDBFQUFjLENBQUMzUyxLQUFLLENBQUMsQ0FBQztNQUN6RDtNQUVBLElBQU15bUIscUJBQXFCLEdBQUc5ZSxHQUFHLENBQUNtZSxlQUFlLENBQUNsQyxTQUFTLENBQUMsVUFBQTNQLGNBQWMsRUFBSTtRQUM1RVQsK0VBQWdDLENBQUNTLGNBQWMsQ0FBQztNQUNsRCxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFuVSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMG1CLDJEQUFBLEVBQTBFO01BQ3hFLElBQUksQ0FBQzFCLDRCQUE0QixHQUFHLElBQUksQ0FBQ2xULDZCQUE2QixDQUFDdk4sZUFBZSxDQUFDLHVDQUF1QyxDQUFDO01BQy9ILElBQUksQ0FBQ3NFLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLElBQUksQ0FBQ2tjLDRCQUE0QixDQUFDO01BRXRHO0lBQ0Y7RUFBQztJQUFBbGxCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEybUIsb0VBQUEsRUFBbUY7TUFDakYsSUFBSSxDQUFDMUIscUNBQXFDLEdBQUcsSUFBSSxDQUFDblQsNkJBQTZCLENBQUN2TixlQUFlLENBQUMsZ0RBQWdELENBQUM7TUFDakosSUFBSSxDQUFDc0UsT0FBTyxDQUFDQyxJQUFJLENBQUMseURBQXlELEVBQUUsSUFBSSxDQUFDbWMscUNBQXFDLENBQUM7TUFFeEg7SUFDRjtFQUFDO0lBQUFubEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTRtQiwrREFBQSxFQUE4RTtNQUM1RSxJQUFJLENBQUN4QixnQ0FBZ0MsR0FBRyxJQUFJLENBQUN0VCw2QkFBNkIsQ0FBQ3ZOLGVBQWUsQ0FBQyw0Q0FBNEMsQ0FBQztNQUN4SSxJQUFJLENBQUNzRSxPQUFPLENBQUNDLElBQUksQ0FBQyxxREFBcUQsRUFBRSxJQUFJLENBQUNzYyxnQ0FBZ0MsQ0FBQztNQUUvRztJQUNGO0VBQUM7SUFBQXRsQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNm1CLG9FQUFBLEVBQW1GO01BQ2pGLElBQUksQ0FBQ3hCLHFDQUFxQyxHQUFHLElBQUksQ0FBQ3ZULDZCQUE2QixDQUFDdk4sZUFBZSxDQUFDLGtEQUFrRCxDQUFDO01BQ25KLElBQUksQ0FBQ3NFLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHNFQUFzRSxFQUFFLElBQUksQ0FBQ3VjLHFDQUFxQyxDQUFDO01BRXJJO0lBQ0Y7RUFBQztJQUFBdmxCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4bUIsbURBQUEsRUFBa0U7TUFDaEVuZixHQUFHLENBQUNvZixZQUFZLENBQUNuRCxTQUFTLENBQUMsVUFBQTVqQixLQUFLLEVBQUk7UUFDbEMySCxHQUFHLENBQUN5ZSxZQUFZLENBQUNwbUIsS0FBSyxHQUFHMkgsR0FBRyxDQUFDcWYsZUFBZSxDQUFDaG5CLEtBQUssQ0FBQztRQUNuRDJILEdBQUcsQ0FBQ3VMLFlBQVksQ0FBQ2xULEtBQUssR0FBRzhULHdFQUFpQyxDQUFDOVQsS0FBSyxDQUFDO01BQ25FLENBQUMsQ0FBQztNQUVGLElBQU1pbkIsWUFBWSxHQUFHLElBQUksQ0FBQ25WLDZCQUE2QixDQUFDNU4sY0FBYyxDQUFDLHNCQUFzQixDQUFDO01BRTlGLElBQUkraUIsWUFBWSxFQUFFO1FBQ2hCLElBQU1yZCxTQUFTLEdBQUdWLHdFQUF5QixDQUFDK2QsWUFBWSxDQUFDO1FBRXpEdGYsR0FBRyxDQUFDeUwsUUFBUSxDQUFDcFQsS0FBSyxHQUFHNEosU0FBUyxDQUFDeUosT0FBTztRQUN0Q21ULHVFQUFzQixHQUFHLENBQUM1YyxTQUFTLENBQUNVLEdBQUcsSUFBSTNDLEdBQUcsQ0FBQ29mLFlBQVksQ0FBQy9tQixLQUFLLEVBQUV3TSxRQUFRLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMzRCxPQUFPLENBQUNDLElBQUksQ0FBQyx3REFBd0QsRUFBRW5CLEdBQUcsQ0FBQ29mLFlBQVksQ0FBQy9tQixLQUFLLENBQUM7UUFFbkc7TUFDRjtNQUVBLElBQU1rbkIsUUFBUSxHQUFHLElBQUksQ0FBQ3BWLDZCQUE2QixDQUFDNU4sY0FBYyxDQUFDLFlBQVksQ0FBQztNQUVoRixJQUFJZ2pCLFFBQVEsRUFBRTtRQUNaVix1RUFBc0IsR0FBR1UsUUFBUTtRQUNqQyxJQUFJLENBQUNyZSxPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsRUFBRW5CLEdBQUcsQ0FBQ29mLFlBQVksQ0FBQy9tQixLQUFLLENBQUM7UUFFcEg7TUFDRjtNQUVBLElBQU1tbkIsWUFBWSxHQUFHLElBQUksQ0FBQ3JWLDZCQUE2QixDQUFDNU4sY0FBYyxDQUFDLGlCQUFpQixDQUFDO01BRXpGLElBQUlpakIsWUFBWSxFQUFFO1FBQ2hCWCx1RUFBc0IsTUFBQTlpQixNQUFBLENBQU15akIsWUFBWSxxQkFBa0I7UUFDMUQsSUFBSSxDQUFDdGUsT0FBTyxDQUFDQyxJQUFJLENBQUMsOEVBQThFLEVBQUVuQixHQUFHLENBQUNvZixZQUFZLENBQUMvbUIsS0FBSyxDQUFDO1FBRXpIO01BQ0Y7SUFDRjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvbkIsS0FBWW5NLE9BQXNCLEVBQVE7TUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQ29NLFlBQVksQ0FBQ3JuQixLQUFLLEVBQUU7UUFDNUIsSUFBSSxDQUFDMGxCLDJCQUEyQixHQUFHLElBQUl4bUIscUVBQTBCLENBQUMsQ0FBQztNQUNyRTtNQUVBLElBQUkrYixPQUFPLEVBQUU7UUFDWCxJQUFJQSxPQUFPLENBQUM4TCxZQUFZLEVBQUU7VUFDeEJQLHVFQUFzQixHQUFHdkwsT0FBTyxDQUFDOEwsWUFBWTtRQUMvQztRQUVBLElBQUk5TCxPQUFPLENBQUNxTSxxQkFBcUIsRUFBRTtVQUNqQ3pOLDRGQUFpRCxHQUFHb0IsT0FBTyxDQUFDcU0scUJBQXFCO1FBQ25GO1FBRUEsSUFBSXJNLE9BQU8sQ0FBQ2hILGNBQWMsSUFBSXRCLDBFQUFjLENBQUNzSSxPQUFPLENBQUNoSCxjQUFjLENBQUMsRUFBRTtVQUNwRXRNLEdBQUcsQ0FBQ21lLGVBQWUsQ0FBQzlsQixLQUFLLEdBQUcwRSwrR0FBK0QsQ0FBQ3VXLE9BQU8sQ0FBQ2hILGNBQWMsQ0FBQztRQUNySDtRQUVBLElBQUlnSCxPQUFPLENBQUM1SSxZQUFZLElBQUkvRCx3REFBWSxDQUFDMk0sT0FBTyxDQUFDNUksWUFBWSxDQUFDLEVBQUU7VUFDOUQsSUFBSSxDQUFDeEosT0FBTyxDQUFDZ0YsU0FBUyxDQUFDa0UsWUFBWSxDQUFDbk4sdUdBQXlELENBQUNxVyxPQUFPLENBQUM1SSxZQUFZLENBQUMsQ0FBQztRQUN0SDtRQUVBLElBQUk0SSxPQUFPLENBQUNzTSxtQkFBbUIsSUFDN0JqWix3REFBWSxDQUFDMk0sT0FBTyxDQUFDc00sbUJBQW1CLENBQUMsRUFBRTtVQUMzQyxJQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDM2UsT0FBTyxDQUFDNEYsU0FBUyxDQUFDek8sS0FBSyxDQUFDNmdCLElBQUksQ0FBQyxVQUFBclQsUUFBUTtZQUFBLE9BQUlBLFFBQVEsWUFBWUksNERBQWU7VUFBQSxFQUFDO1VBRTFHLElBQUk0WixlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDM2UsT0FBTyxDQUFDNEYsU0FBUyxDQUFDaEIsTUFBTSxDQUFDK1osZUFBZSxDQUFDO1VBQ2hEO1VBRUEsSUFBSXZNLE9BQU8sQ0FBQ3NNLG1CQUFtQixLQUFLLEtBQUssRUFBRTtZQUN6QyxJQUFJLENBQUMxZSxPQUFPLENBQUM0RixTQUFTLENBQUN6TixHQUFHLENBQUMsSUFBSTRNLDREQUFlLENBQUNoSix1R0FBeUQsQ0FBQ3FXLE9BQU8sQ0FBQ3NNLG1CQUFtQixDQUFDLENBQUMsQ0FBQztVQUN6STtRQUNGO1FBRUEsSUFBSSxPQUFPdE0sT0FBTyxDQUFDd00sNEJBQTRCLEtBQUssU0FBUyxFQUFFO1VBQzdELElBQUksQ0FBQ3ZDLDZCQUE2QixHQUFHakssT0FBTyxDQUFDd00sNEJBQTRCO1FBQzNFO1FBRUEsSUFBSSxPQUFPeE0sT0FBTyxDQUFDeU0sbUNBQW1DLEtBQUssU0FBUyxFQUFFO1VBQ3BFLElBQUksQ0FBQ3ZDLG9DQUFvQyxHQUFHbEssT0FBTyxDQUFDeU0sbUNBQW1DO1FBQ3pGO1FBRUEsSUFBSXpNLE9BQU8sQ0FBQzBNLGVBQWUsRUFBRTtVQUMzQixJQUFJLENBQUNyQyxnQkFBZ0IsR0FBR3JLLE9BQU8sQ0FBQzBNLGVBQWU7UUFDakQ7UUFFQSxJQUFJMU0sT0FBTyxDQUFDMk0saUJBQWlCLEVBQUU7VUFDN0IsSUFBSSxDQUFDckMsa0JBQWtCLEdBQUd0SyxPQUFPLENBQUMyTSxpQkFBaUI7UUFDckQ7UUFFQSxJQUFJM00sT0FBTyxDQUFDNE0sV0FBVyxFQUFFO1VBQ3ZCLElBQUksQ0FBQ3JDLFlBQVksR0FBR3ZLLE9BQU8sQ0FBQzRNLFdBQVc7UUFDekM7TUFDRjtNQUVBbGdCLEdBQUcsQ0FBQzBmLFlBQVksQ0FBQ3JuQixLQUFLLEdBQUcsSUFBSTtJQUMvQjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLFFBQUEsRUFBdUI7TUFDckJ3SCxHQUFHLENBQUMwZixZQUFZLENBQUNybkIsS0FBSyxHQUFHLEtBQUs7TUFDOUIsSUFBSSxDQUFDMGxCLDJCQUEyQixDQUFDdmxCLE9BQU8sQ0FBQyxDQUFDO01BQzFDLElBQUksQ0FBQ3VsQiwyQkFBMkIsR0FBRyxJQUFJO0lBQ3pDO0VBQUM7SUFBQTVsQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBZ25CLGdCQUF1QmpVLEdBQVcsRUFBVTtNQUMxQyxPQUFPYyxtRUFBNEIsQ0FBQ2QsR0FBRyxDQUFDO0lBQzFDO0VBQUM7RUFBQSxPQUFBcEwsR0FBQTtBQUFBO0FBQUE1RCxNQUFBLEdBL1RrQjRELEdBQUc7QUFBQXZJLDJJQUFBLENBQUh1SSxHQUFHLGtDQUN3QixJQUFJO0FBQUF2SSwySUFBQSxDQUQvQnVJLEdBQUcsMkNBRWlDLElBQUk7QUFBQXZJLDJJQUFBLENBRnhDdUksR0FBRyxtQ0FHeUIsSUFBSTtBQUFBdkksMklBQUEsQ0FIaEN1SSxHQUFHLDBDQUlnQyxJQUFJO0FBQUF2SSwySUFBQSxDQUp2Q3VJLEdBQUcsc0NBSzRCLElBQUk7QUFBQXZJLDJJQUFBLENBTG5DdUksR0FBRywyQ0FNaUMsSUFBSTtBQUFBdkksMklBQUEsQ0FOeEN1SSxHQUFHLHNCQU9ZLElBQUk7QUFBQXZJLDJJQUFBLENBUG5CdUksR0FBRyx3QkFRYyxJQUFJO0FBQUF2SSwySUFBQSxDQVJyQnVJLEdBQUcsa0JBU1EsSUFBSTtBQUFBdkksMklBQUEsQ0FUZnVJLEdBQUcsbUNBVXdELElBQUkxRCx1RUFBNEIsQ0FBQyxDQUFDO0FBQUE3RSwySUFBQSxDQVY3RnVJLEdBQUc7QUFBQXZJLDJJQUFBLENBQUh1SSxHQUFHLGtCQVl5QixJQUFJbEksZ0RBQU8sQ0FBUyxFQUFFLENBQUM7QUFBQUwsMklBQUEsQ0FabkR1SSxHQUFHLG1CQWEwQixJQUFJbEksZ0RBQU8sQ0FBUywyQ0FBMkMsQ0FBQztBQUFBTCwySUFBQSxDQWI3RnVJLEdBQUcscURBYzJDLENBQUM7QUFBQXZJLDJJQUFBLENBZC9DdUksR0FBRyxxQkFlb0MsSUFBSWxJLGdEQUFPLENBQWlCa0YscUZBQXNDLENBQUM7QUFBQXZGLDJJQUFBLENBZjFHdUksR0FBRztBQUFBdkksMklBQUEsQ0FBSHVJLEdBQUc7QUFBQXZJLDJJQUFBLENBQUh1SSxHQUFHLDBCQWtCMkMsSUFBSWxJLGdEQUFPLENBQUMrSyxvRkFBaUMsQ0FBQztBQUFBcEwsMklBQUEsQ0FsQjVGdUksR0FBRyxjQW1COEIsSUFBSWxJLGdEQUFPLENBQVMsRUFBRSxDQUFDO0FBQUFMLDJJQUFBLENBbkJ4RHVJLEdBQUcsc0JBb0I2QjhFLHlEQUFjLENBQUMsRUFBRSxDQUFDO0FBQUFyTiwySUFBQSxDQXBCbER1SSxHQUFHLHNCQXFCMkIsSUFBSXJJLElBQUksQ0FBQyxDQUFDO0FBQUFGLDJJQUFBLENBckJ4Q3VJLEdBQUcsYUFzQnFCRCxvRUFBdUIsQ0FBQyxLQUFLLENBQUM7QUFBQXRJLDJJQUFBLENBdEJ0RHVJLEdBQUcsa0JBdUJtQyxJQUFJbEksZ0RBQU8sQ0FBVSxLQUFLLENBQUM7QUFBQUwsMklBQUEsQ0F2QmpFdUksR0FBRywwQkF3Qm1ELElBQUloSSx3REFBZSxDQUFVZ0ksTUFBRyxDQUFDMGYsWUFBWSxDQUFDO0FBQUFqb0IsMklBQUEsQ0F4QnBHdUksR0FBRywyQkF5Qm1ELElBQUloSSx3REFBZSxDQUFTNm1CLGlFQUFnQixDQUFDO0FBQUFwbkIsMklBQUEsQ0F6Qm5HdUksR0FBRyxvQ0EwQjRFLElBQUloSSx3REFBZSxDQUF5QmthLHNGQUEyQyxDQUFDO0FBMUJwSztBQXNVeEJ0WSxNQUFNLENBQUNSLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxZQUFNO0VBQ3RDNEcsR0FBRyxDQUFDeEgsT0FBTyxDQUFDLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRndILEdBQUcsQ0FBQ21mLGtEQUFrRCxDQUFDLENBQUM7QUFDeERuZixHQUFHLENBQUM0ZSx5QkFBeUIsQ0FBQyxDQUFDO0FBQy9CNWUsR0FBRyxDQUFDb2UsMkJBQTJCLENBQUMsQ0FBQztBQUNqQ3BlLEdBQUcsQ0FBQytlLDBEQUEwRCxDQUFDLENBQUM7QUFDaEUvZSxHQUFHLENBQUNnZixtRUFBbUUsQ0FBQyxDQUFDO0FBQ3pFaGYsR0FBRyxDQUFDaWYsOERBQThELENBQUMsQ0FBQztBQUNwRWpmLEdBQUcsQ0FBQ2tmLG1FQUFtRSxDQUFDLENBQUM7QUFDekVsZixHQUFHLENBQUN5ZixJQUFJLENBQUMsQ0FBQyxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlYVjtBQUNBO0FBQ0E7QUFGQSxJQUlxQnZULFlBQVk7RUFBQSxTQUFBQSxhQUFBO0lBQUExVSwySUFBQSxPQUFBMFUsWUFBQTtFQUFBO0VBQUFoVSx3SUFBQSxDQUFBZ1UsWUFBQTtJQUFBL1QsR0FBQTtJQUFBRSxLQUFBLEVBQy9CLFNBQUFnbkIsZ0JBQXVCalUsR0FBVyxFQUFVO01BQzFDLElBQUk7UUFDRixJQUFNMFIsT0FBTyxHQUFHLElBQUl4ZSxHQUFHLENBQUM4TSxHQUFHLENBQUM7UUFDNUIsSUFBTStVLFFBQVEsR0FBR3JELE9BQU8sQ0FBQ25RLFFBQVEsQ0FBQ25SLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFNUMsUUFBUXNoQixPQUFPLENBQUNzRCxRQUFRO1VBQ3RCLEtBQUssS0FBSztZQUNSdEQsT0FBTyxDQUFDc0QsUUFBUSxHQUFHLE9BQU87WUFFMUI7VUFDRixLQUFLLE1BQU07WUFDVHRELE9BQU8sQ0FBQ3NELFFBQVEsR0FBRyxRQUFRO1lBRTNCO1VBRUY7WUFDRTtRQUNKO1FBRUEsSUFBSUQsUUFBUSxDQUFDbmUsTUFBTSxLQUFLLENBQUMsSUFDcEJtZSxRQUFRLENBQUNuZSxNQUFNLEtBQUssQ0FBQyxJQUFJbWUsUUFBUSxDQUFDQSxRQUFRLENBQUNuZSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUltZSxRQUFRLENBQUNBLFFBQVEsQ0FBQ25lLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQ0EsTUFBTSxJQUFJLENBQUUsRUFDbkg7VUFDQW1lLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUMvQixDQUFDLE1BQU0sSUFBSUYsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOWQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJOGQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUlILFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzlqQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUk4akIsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtVQUNuSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWU7UUFDL0IsQ0FBQyxNQUFNLElBQUlBLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzlkLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSThkLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQzVFO1FBQUEsQ0FDRCxNQUFNO1VBQ0xILFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXO1FBQzNCO1FBRUFyRCxPQUFPLENBQUNuUSxRQUFRLEdBQUd3VCxRQUFRLENBQUNJLElBQUksQ0FBQyxHQUFHLENBQUM7UUFFckMsVUFBQXhrQixNQUFBLENBQVUrZ0IsT0FBTyxDQUFDQyxNQUFNO01BQzFCLENBQUMsQ0FBQyxPQUFPM2EsQ0FBQyxFQUFFO1FBQ1YsT0FBT2dKLEdBQUc7TUFDWjtJQUNGO0VBQUM7RUFBQSxPQUFBYyxZQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxQ0g7QUFDQTtBQUNBOztBQUtPLElBQUtzVSxZQUFZLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBQSxPQUFaQSxZQUFZO0FBQUE7QUFLakIsSUFBS0MsV0FBVywwQkFBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFBLE9BQVhBLFdBQVc7QUFBQSxNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWnZCO0FBQ0E7QUFDQTtBQUN1RDtBQUVBO0FBQ1Q7QUFDaUI7QUFFdEM7QUFDK0M7QUFFOUI7QUFDbUI7QUFDZDtBQUVTO0FBQ0k7QUFFZ0I7QUFDakI7QUFHUjtBQUM2QjtBQUNVO0FBQ1M7QUFDSztBQUNuQztBQUNsQjtBQUNJO0FBQ1I7QUFDTTtBQUNLO0FBRVU7QUFFcEUsSUFBTUMsOEJBQThCLEdBQUcsb0JBQW9CO0FBQzNELElBQU1DLHlDQUF5QyxHQUFHLElBQUk7QUFDdEQsSUFBTUMsb0NBQW9DLEdBQUcsS0FBSztBQUFDLElBVTlCQyxPQUFPLDBCQUFBQyxLQUFBLEVBQUFDLE9BQUEsRUFBQUMsUUFBQSxFQUFBQyxNQUFBLEVBQUFDLGFBQUEsRUFBQUMsaUJBQUEsRUFBQUMsS0FBQSxFQUFBQyxvQkFBQSxFQUFBQyw4QkFBQTtFQW9DMUIsU0FBQVQsUUFBWVUsWUFBOEIsRUFBRTlmLEtBQXVCLEVBQUU2UixPQUF3QixFQUFFO0lBQUEsSUFBQTVhLEtBQUE7SUFBQWxCLDJJQUFBLE9BQUFxcEIsT0FBQTtJQUFBcHBCLDJJQUFBLGtCQW5DM0RzSSxvRUFBdUIsQ0FBQyxTQUFTLENBQUM7SUFBQXRJLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBb0NwRSxJQUFNd0ssU0FBUyxHQUFHVix5RUFBeUIsQ0FBQ0UsS0FBSyxDQUFDO0lBQ2xELElBQU0rZixxQkFBNEMsR0FBRztNQUFDQyxTQUFTLEVBQUVuTyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRW1PO0lBQVMsQ0FBQztJQUNwRixJQUFNQyw2QkFBNEQsR0FBRztNQUNuRUMsb0JBQW9CLEVBQUUxZixTQUFTLENBQUNXLFlBQVksQ0FBQ3ZHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztNQUMzRXVsQiwyQkFBMkIsRUFBRTNmLFNBQVMsQ0FBQ1csWUFBWSxDQUFDdkcsUUFBUSxDQUFDLDRCQUE0QixDQUFDO01BQzFGd2xCLDRCQUE0QixFQUFFdk8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV1Tyw0QkFBNEI7TUFDbkVDLDRCQUE0QixFQUFFeE8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV3Tyw0QkFBNEI7TUFDbkVDLHNCQUFzQixFQUFFek8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV5TyxzQkFBc0I7TUFDdkRDLHNCQUFzQixFQUFFMU8sT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUwTztJQUNuQyxDQUFDO0lBRUQsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSUMsMkRBQVksQ0FBQ3pnQixLQUFLLENBQUM7SUFDNUMsSUFBSSxDQUFDMGdCLGVBQWUsR0FBRyxJQUFJQyw2REFBYyxDQUFDWixxQkFBcUIsQ0FBQztJQUNoRSxJQUFJLENBQUNhLHNCQUFzQixHQUFHLElBQUlDLG9FQUFxQixDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDQyx1QkFBdUIsR0FBRyxJQUFJQyxxRUFBc0IsQ0FBQ2QsNkJBQTZCLENBQUM7SUFDeEYsSUFBSSxDQUFDZSxhQUFhLEdBQUcsSUFBSUMsMkRBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQzdWLG1CQUFtQixHQUFHLElBQUlDLDZEQUFrQixDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDNlYsaUJBQWlCLEdBQUdockIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxJQUFJLENBQUNnckIscUJBQXFCLEdBQUcsSUFBSTVxQix3REFBZSxDQUFtQixJQUFJLENBQUNtcUIsZUFBZSxDQUFDWixZQUFZLENBQUM7SUFDckcsSUFBSSxDQUFDc0IsY0FBYyxHQUFHLElBQUk3cUIsd0RBQWUsQ0FBUyxJQUFJLENBQUNpcUIsYUFBYSxDQUFDeGdCLEtBQUssQ0FBQztJQUMzRSxJQUFJLENBQUNxaEIsdUJBQXVCLEdBQUcsSUFBSTlxQix3REFBZSxDQUFrQixJQUFJLENBQUNxcUIsc0JBQXNCLENBQUMzUCxjQUFjLENBQUM7SUFDL0csSUFBSSxDQUFDcVEsY0FBYyxHQUFHLElBQUkvcUIsd0RBQWUsQ0FBZSxJQUFJLENBQUNtcUIsZUFBZSxDQUFDYSxLQUFLLENBQUM7SUFDbkYsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJanJCLHdEQUFlLENBQVUsSUFBSSxDQUFDbXFCLGVBQWUsQ0FBQ2UsU0FBUyxDQUFDO0lBQ3RGLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSW5yQix3REFBZSxDQUFVLElBQUksQ0FBQ21xQixlQUFlLENBQUNpQixVQUFVLENBQUM7SUFDeEYsSUFBSSxDQUFDQyxzQkFBc0IsR0FBRyxJQUFJcnJCLHdEQUFlLENBQVUsSUFBSSxDQUFDaXFCLGFBQWEsQ0FBQ3FCLGFBQWEsQ0FBQztJQUM1RixJQUFJLENBQUNDLG1CQUFtQixHQUFHLElBQUl2ckIsd0RBQWUsQ0FBVSxJQUFJLENBQUNtcUIsZUFBZSxDQUFDcUIsVUFBVSxDQUFDO0lBQ3hGLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUl6ckIsd0RBQWUsQ0FBVSxJQUFJLENBQUNtcUIsZUFBZSxDQUFDdUIsTUFBTSxDQUFDO0lBQ2hGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSTNyQix3REFBZSxDQUFVLElBQUksQ0FBQ21xQixlQUFlLENBQUN5QixPQUFPLENBQUM7SUFDbEYsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxJQUFJN3JCLHdEQUFlLENBQVUsSUFBSSxDQUFDbXFCLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQztJQUNsRixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUkvckIsd0RBQWUsQ0FBVSxJQUFJLENBQUNtcUIsZUFBZSxDQUFDNkIsT0FBTyxDQUFDO0lBQ2xGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSWpzQix3REFBZSxDQUFVLElBQUksQ0FBQ21xQixlQUFlLENBQUMrQixPQUFPLENBQUM7SUFDbEYsSUFBSSxDQUFDQyxrQkFBa0IsR0FBRyxJQUFJbnNCLHdEQUFlLENBQVMsSUFBSSxDQUFDbXFCLGVBQWUsQ0FBQ1YsU0FBUyxDQUFDO0lBQ3JGLElBQUksQ0FBQzJDLFlBQVksR0FBRyxJQUFJcHNCLHdEQUFlLENBQVMsSUFBSSxDQUFDbXFCLGVBQWUsQ0FBQ2tDLEdBQUcsQ0FBQztJQUN6RSxJQUFJLENBQUNDLHFCQUFxQixHQUFHLElBQUl0c0Isd0RBQWUsQ0FBUyxJQUFJLENBQUNtcUIsZUFBZSxDQUFDb0MsWUFBWSxDQUFDO0lBQzNGLElBQUksQ0FBQ0MsbUJBQW1CLEdBQUcsSUFBSXhzQix3REFBZSxDQUFZLElBQUksQ0FBQ21xQixlQUFlLENBQUNzQyxVQUFVLENBQUM7SUFDMUYsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxJQUFJMXNCLHdEQUFlLENBQVMsSUFBSSxDQUFDbXFCLGVBQWUsQ0FBQ3dDLFlBQVksQ0FBQztJQUMzRixJQUFJLENBQUNDLGlCQUFpQixHQUFHLElBQUk1c0Isd0RBQWUsQ0FBVyxJQUFJLENBQUNtcUIsZUFBZSxDQUFDMEMsUUFBUSxDQUFDO0lBQ3JGLElBQUksQ0FBQ0MsZUFBZSxHQUFHLElBQUk5c0Isd0RBQWUsQ0FBVSxJQUFJLENBQUNtcUIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDO0lBQ2hGLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsSUFBSWh0Qix3REFBZSxDQUF1QixJQUFJLENBQUNtcUIsZUFBZSxDQUFDM0wsYUFBYSxDQUFDO0lBQzNHLElBQUksQ0FBQ3lPLG9CQUFvQixHQUFHLElBQUlqdEIsd0RBQWUsQ0FBYyxJQUFJLENBQUNxcUIsc0JBQXNCLENBQUN4TixXQUFXLENBQUM7SUFFckcsSUFBTXVLLFlBQVksR0FBRyxDQUFDbmQsU0FBUyxDQUFDVSxHQUFHLElBQUkzQyw0REFBc0IsRUFBRTZFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFN0UsdURBQWlCLEdBQUdpQyxTQUFTLENBQUN5SixPQUFPLElBQUkxTCx1REFBaUI7SUFDMUQ2ZSx1RUFBc0IsR0FBR08sWUFBWTtJQUNyQyxJQUFJLENBQUN0QixlQUFlLEdBQUdqUywrRUFBZ0MsQ0FBQ3VULFlBQVksQ0FBQztJQUNyRSxJQUFJLENBQUM4RixpQkFBaUIsR0FBRyxJQUFJQyw2REFBZ0IsQ0FBQ25sQixzREFBZ0IsRUFBRSxJQUFJLENBQUM4ZCxlQUFlLENBQUM7SUFDckYsSUFBSSxDQUFDcUUsZUFBZSxDQUFDaUQsa0JBQWtCLENBQUMvckIsR0FBRyxDQUFDLElBQUksQ0FBQzZyQixpQkFBaUIsQ0FBQztJQUNuRSxJQUFJLENBQUNHLDRCQUE0QixHQUFHLElBQUksQ0FBQ0MsMEJBQTBCLENBQUN0YixJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlFLElBQUksQ0FBQ3VYLFlBQVksR0FBR0EsWUFBWTtJQUVoQyxJQUFJLENBQUNZLGVBQWUsQ0FBQ2lELGtCQUFrQixDQUFDL3JCLEdBQUcsQ0FDekMsSUFBSSxDQUFDOG9CLGVBQWUsQ0FBQ1osWUFBWSxDQUFDdEYsU0FBUyxDQUFDLFVBQUFzRixZQUFZLEVBQUk7TUFDMUQ3b0IsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ29ELG1CQUFtQixDQUFDL3NCLE9BQU8sQ0FBQyxDQUFDO01BRWxELElBQUksQ0FBQytvQixZQUFZLEVBQUU7UUFDakI7TUFDRjtNQUVBN29CLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNvRCxtQkFBbUIsQ0FBQ2xzQixHQUFHLENBQUNYLEtBQUksQ0FBQ3lwQixlQUFlLENBQUM0QyxNQUFNLENBQUM5SSxTQUFTLENBQUMsVUFBQThJLE1BQU0sRUFBSTtRQUMzRixJQUFJcnNCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNxRCxjQUFjLEVBQUU7VUFDdkM5c0IsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3FELGNBQWMsQ0FBQ2h0QixPQUFPLENBQUMsQ0FBQztRQUMvQztRQUVBLElBQUksQ0FBQ3VzQixNQUFNLEVBQUU7VUFDWDtRQUNGO1FBRUEsSUFBSSxDQUFDcnNCLEtBQUksQ0FBQzZvQixZQUFZLEVBQUU7VUFDdEI7UUFDRjtRQUVBLElBQUk3b0IsS0FBSSxDQUFDNm9CLFlBQVksQ0FBQ2tFLE9BQU8sRUFBRTtVQUM3Qi9zQixLQUFJLENBQUM2b0IsWUFBWSxDQUFDa0UsT0FBTyxDQUFDN1osU0FBUyxHQUFHNUwseURBQW1CO1VBQ3pEdEgsS0FBSSxDQUFDNm9CLFlBQVksQ0FBQ2tFLE9BQU8sQ0FBQ3JsQixRQUFRLEdBQUcxSCxLQUFJLENBQUMwSCxRQUFRO1FBQ3BEO1FBRUExSCxLQUFJLENBQUN5cEIsZUFBZSxDQUFDcUQsY0FBYyxHQUFHLElBQUlFLDJEQUFjLENBQUNodEIsS0FBSSxDQUFDMEgsUUFBUSxFQUFFSixzREFBZ0IsRUFBRXRILEtBQUksQ0FBQ2lxQixpQkFBaUIsRUFBRWpxQixLQUFJLENBQUNvbEIsZUFBZSxDQUFDO1FBQ3ZJcGxCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNxRCxjQUFjLENBQUNHLCtCQUErQixDQUFDanRCLEtBQUksQ0FBQzZvQixZQUFZLENBQUM7UUFDdEY3b0IsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3FELGNBQWMsQ0FBQ0ksMkJBQTJCLENBQUNsdEIsS0FBSSxDQUFDNm9CLFlBQVksQ0FBQztRQUVsRixJQUFJN29CLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEtBQUt3dEIsMkRBQW9CLEVBQUU7VUFDN0QsSUFBTXJZLE9BQU8sR0FBRzlVLEtBQUksQ0FBQ290QixnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDO01BQ0YsQ0FBQyxDQUFDLENBQUM7TUFFSHB0QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDaUQsa0JBQWtCLENBQUMvckIsR0FBRyxDQUFDWCxLQUFJLENBQUN5cEIsZUFBZSxDQUFDb0QsbUJBQW1CLENBQUM7SUFDdkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxJQUFJLENBQUNwRCxlQUFlLENBQUNpRCxrQkFBa0IsQ0FBQy9yQixHQUFHLENBQ3pDLElBQUksQ0FBQzhvQixlQUFlLENBQUNhLEtBQUssQ0FBQy9HLFNBQVMsQ0FBQyxVQUFBK0csS0FBSyxFQUFJO01BQzVDLElBQUl0cUIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRELHdCQUF3QixFQUFFO1FBQ2pEOVAsWUFBWSxDQUFDdmQsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRELHdCQUF3QixDQUFDO01BQzdEO01BRUEsSUFBSSxDQUFDcnRCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUN3QyxZQUFZLENBQUN0c0IsS0FBSyxFQUFFO1FBQzVDO01BQ0Y7TUFFQSxJQUFJMnFCLEtBQUssS0FBSzZDLDJEQUFvQixFQUFFO1FBQ2xDO01BQ0Y7TUFFQW50QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDNEQsd0JBQXdCLEdBQUduc0IsTUFBTSxDQUFDc0UsVUFBVSxDQUFDLFlBQU07UUFDdEV4RixLQUFJLENBQUN5cEIsZUFBZSxDQUFDd0MsWUFBWSxDQUFDdHNCLEtBQUssR0FBRyxDQUFDO01BQzdDLENBQUMsRUFBRXNvQix5Q0FBeUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksQ0FBQ3dCLGVBQWUsQ0FBQ2lELGtCQUFrQixDQUFDL3JCLEdBQUcsQ0FDekMsSUFBSSxDQUFDOG9CLGVBQWUsQ0FBQ3NDLFVBQVUsQ0FBQ3hJLFNBQVMsQ0FBQyxVQUFBd0ksVUFBVSxFQUFJO01BQ3RELElBQUkvckIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3FELGNBQWMsRUFBRTtRQUN2QzlzQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDcUQsY0FBYyxDQUFDUSx3QkFBd0IsQ0FBQ3ZCLFVBQVUsQ0FBQzVmLFFBQVEsQ0FBQyxDQUFDLENBQUM7TUFDckY7SUFDRixDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksQ0FBQ3NkLGVBQWUsQ0FBQ2lELGtCQUFrQixDQUFDL3JCLEdBQUcsQ0FDekMsSUFBSSxDQUFDOG9CLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ3RJLFNBQVMsQ0FBQyxVQUFBc0ksWUFBWSxFQUFJO01BQzFELElBQUlBLFlBQVksSUFBSTdyQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDMEMsUUFBUSxDQUFDeHNCLEtBQUssSUFBSUssS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEVBQUU7UUFDNUYsSUFBTTR0QixxQkFBcUIsR0FBR3R1QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUdjLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMrRCxxQkFBcUIsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7UUFDL0YsSUFBTTNZLE9BQU8sR0FBRzlVLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDK3RCLFlBQVksQ0FDOUQxdEIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEVBQ2pDNHRCLHFCQUFxQixFQUNyQjFCLFlBQVksRUFDWi9ELCtFQUFpQixFQUNqQkMsZ0ZBQ0YsQ0FBQyxDQUNFaFIsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7VUFDVjFKLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFUyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO01BQ047SUFDRixDQUFDLENBQ0gsQ0FBQztJQUVELElBQU1pa0Isc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBQSxFQUFTO01BQ25DLElBQUkzdEIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLElBQUlLLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxFQUFFO1FBQzVFLElBQU1tVixPQUFPLEdBQUc5VSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDMEMsUUFBUSxDQUFDeHNCLEtBQUssQ0FBQ2d1QixzQkFBc0IsQ0FBQzN0QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQztNQUN0SjtJQUNGLENBQUM7SUFFRHVCLE1BQU0sQ0FBQ1IsZ0JBQWdCLENBQUMsY0FBYyxFQUFFaXRCLHNCQUFzQixDQUFDO0lBRS9ELElBQUksQ0FBQ2xFLGVBQWUsQ0FBQ2lELGtCQUFrQixDQUFDL3JCLEdBQUcsQ0FBQyxJQUFJQyxzREFBVSxDQUFDLFlBQU07TUFDL0RNLE1BQU0sQ0FBQ0wsbUJBQW1CLENBQUMsY0FBYyxFQUFFOHNCLHNCQUFzQixDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQztFQUNkO0VBQUNwdUIsd0lBQUEsQ0FBQTJvQixPQUFBO0lBQUExb0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFxQztNQUNuQyxPQUFPLElBQUksQ0FBQytwQixlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLO0lBQ2hELENBQUM7SUFBQThTLEdBQUEsRUFFRCxTQUFBQSxJQUFpQm9XLFlBQThCLEVBQUU7TUFDL0MsSUFBSSxJQUFJLENBQUNZLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssRUFBRTtRQUMzQyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDa0IsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQzhyQiw0QkFBNEIsQ0FBQztRQUM1RyxJQUFJLENBQUNsRCxlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLENBQUNrQixtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM4ckIsNEJBQTRCLENBQUM7UUFDaEgsSUFBSSxDQUFDbEQsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDa0IsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQzhyQiw0QkFBNEIsQ0FBQztRQUV4RyxJQUFJLElBQUksQ0FBQ2xELGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssQ0FBQ290QixPQUFPLEVBQUU7VUFDbkQsSUFBSSxDQUFDdEQsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDb3RCLE9BQU8sQ0FBQzdaLFNBQVMsR0FBRyxFQUFFO1VBQzlELElBQUksQ0FBQ3VXLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssQ0FBQ290QixPQUFPLENBQUNybEIsUUFBUSxHQUFHLEVBQUU7UUFDL0Q7UUFFQSxJQUFJLENBQUMraEIsZUFBZSxDQUFDb0QsbUJBQW1CLENBQUMvc0IsT0FBTyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDMnBCLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssQ0FBQ2t1QixLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUNwRSxlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLENBQUNtdUIsU0FBUyxHQUFHLElBQUk7TUFDMUQ7TUFFQSxJQUFJLENBQUNyRSxlQUFlLENBQUNlLFNBQVMsQ0FBQzdxQixLQUFLLEdBQUcsS0FBSztNQUM1QyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDaUIsVUFBVSxDQUFDL3FCLEtBQUssR0FBRyxLQUFLO01BQzdDLElBQUksQ0FBQzhwQixlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7TUFDMUMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsS0FBSztNQUMxQyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDJEQUFvQjtNQUV2RCxJQUFJLENBQUMxRCxlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLEdBQUdrcEIsWUFBWTtNQUV0RCxJQUFJLElBQUksQ0FBQ1ksZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxFQUFFO1FBQzNDLElBQUksQ0FBQzhwQixlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLENBQUNlLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUNpc0IsNEJBQTRCLENBQUM7UUFDekcsSUFBSSxDQUFDbEQsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDZSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNpc0IsNEJBQTRCLENBQUM7UUFDN0csSUFBSSxDQUFDbEQsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDZSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDaXNCLDRCQUE0QixDQUFDO01BQ3ZHO0lBQ0Y7RUFBQztJQUFBbHRCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpdEIsMkJBQUEsRUFBMkM7TUFDekMsSUFBTS9ELFlBQVksR0FBRyxJQUFJLENBQUNZLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUs7TUFFNUQsSUFBSWtwQixZQUFZLEVBQUU7UUFDaEIsSUFBSSxJQUFJLENBQUNrRCxVQUFVLENBQUNwc0IsS0FBSyxDQUFDb3VCLEtBQUssS0FBS2xGLFlBQVksQ0FBQ21GLFVBQVUsSUFBSSxJQUFJLENBQUNqQyxVQUFVLENBQUNwc0IsS0FBSyxDQUFDc3VCLE1BQU0sS0FBS3BGLFlBQVksQ0FBQ3FGLFdBQVcsRUFBRTtVQUN4SCxJQUFJLENBQUN6RSxlQUFlLENBQUNzQyxVQUFVLENBQUNwc0IsS0FBSyxHQUFHLElBQUl3dUIscURBQVMsQ0FBQ3RGLFlBQVksQ0FBQ21GLFVBQVUsRUFBRW5GLFlBQVksQ0FBQ3FGLFdBQVcsQ0FBQztRQUMxRztNQUNGLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ3pFLGVBQWUsQ0FBQ3NDLFVBQVUsQ0FBQ3BzQixLQUFLLEdBQUd3dUIsMkRBQWU7TUFDekQ7SUFDRjtFQUFDO0lBQUExdUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQzZwQixhQUFhLENBQUN4Z0IsS0FBSyxDQUFDcEosS0FBSztJQUN2QyxDQUFDO0lBQUE4UyxHQUFBLEVBRUQsU0FBQUEsSUFBVTFKLEtBQXVCLEVBQUU7TUFDakMsSUFBSSxDQUFDMGdCLGVBQWUsQ0FBQzJFLFdBQVcsQ0FBQ3R1QixPQUFPLENBQUMsQ0FBQztNQUUxQyxJQUFJLENBQUN5cEIsYUFBYSxDQUFDeGdCLEtBQUssQ0FBQ3BKLEtBQUssR0FBR29KLEtBQUs7TUFDdEMsSUFBSSxDQUFDd2dCLGFBQWEsQ0FBQ3FCLGFBQWEsQ0FBQ2pyQixLQUFLLEdBQUcsS0FBSztNQUU5QyxJQUFNNEosU0FBUyxHQUFHVix5RUFBeUIsQ0FBQyxJQUFJLENBQUMwZ0IsYUFBYSxDQUFDeGdCLEtBQUssQ0FBQ3BKLEtBQUssQ0FBQztNQUMzRSxJQUFNK21CLFlBQVksR0FBRyxDQUFDbmQsU0FBUyxDQUFDVSxHQUFHLElBQUkzQyw0REFBc0IsRUFBRTZFLFFBQVEsQ0FBQyxDQUFDO01BRXpFN0UsdURBQWlCLEdBQUdpQyxTQUFTLENBQUN5SixPQUFPLElBQUkxTCx1REFBaUI7TUFDMUQ2ZSx1RUFBc0IsR0FBR08sWUFBWTtNQUVyQyxJQUFJLENBQUN0QixlQUFlLEdBQUdqUywrRUFBZ0MsQ0FBQ3VULFlBQVksQ0FBQztNQUVyRSxJQUFJLENBQUNtRCx1QkFBdUIsQ0FBQ1osb0JBQW9CLENBQUN0cEIsS0FBSyxHQUFHNEosU0FBUyxDQUFDVyxZQUFZLENBQUN2RyxRQUFRLENBQUMsb0JBQW9CLENBQUM7TUFDL0csSUFBSSxDQUFDa21CLHVCQUF1QixDQUFDWCwyQkFBMkIsQ0FBQ3ZwQixLQUFLLEdBQUc0SixTQUFTLENBQUNXLFlBQVksQ0FBQ3ZHLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQztNQUU5SCxJQUFJLENBQUNpcUIsS0FBSyxDQUFDLENBQUM7SUFDZDtFQUFDO0lBQUFudUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1RDtNQUNyRCxPQUFPLElBQUksQ0FBQzBxQix1QkFBdUI7SUFDckM7RUFBQztJQUFBM3FCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUMycUIsY0FBYztJQUM1QjtFQUFDO0lBQUE1cUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPLElBQUksQ0FBQzZxQixrQkFBa0I7SUFDaEM7RUFBQztJQUFBOXFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUMrcUIsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQWhyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDaXJCLHNCQUFzQjtJQUNwQztFQUFDO0lBQUFsckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQztNQUN6QyxPQUFPLElBQUksQ0FBQ21yQixtQkFBbUI7SUFDakM7RUFBQztJQUFBcHJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUNxckIsZUFBZTtJQUM3QjtFQUFDO0lBQUF0ckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQ3VyQixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBeHJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUN5ckIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQTFyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sSUFBSSxDQUFDMnJCLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUE1ckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQzZyQixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBOXJCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBTyxJQUFJLENBQUMrckIsa0JBQWtCO0lBQ2hDO0VBQUM7SUFBQWhzQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sSUFBSSxDQUFDZ3NCLFlBQVk7SUFDMUI7RUFBQztJQUFBanNCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNrc0IscUJBQXFCLENBQUNqc0IsS0FBSztJQUN6QztFQUFDO0lBQUFGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkM7TUFDM0MsT0FBTyxJQUFJLENBQUNvc0IsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQXJzQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU8sSUFBSSxDQUFDc3NCLHFCQUFxQjtJQUNuQztFQUFDO0lBQUF2c0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPLElBQUksQ0FBQ3dzQixpQkFBaUI7SUFDL0I7RUFBQztJQUFBenNCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUMwc0IsZUFBZTtJQUM3QjtFQUFDO0lBQUEzc0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QjtNQUNyQixPQUFPLElBQUksQ0FBQytwQixlQUFlLENBQUMvaEIsUUFBUTtJQUN0QztFQUFDO0lBQUFqSSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDNHNCLHNCQUFzQjtJQUNwQztFQUFDO0lBQUE3c0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPLElBQUksQ0FBQzZzQixvQkFBb0I7SUFDbEM7RUFBQztJQUFBOXNCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwdUIsZ0JBQWdCeEMsWUFBMkIsRUFBUTtNQUNqRCxJQUFJLENBQUNwQyxlQUFlLENBQUNvQyxZQUFZLENBQUNsc0IsS0FBSyxHQUFHa3NCLFlBQVk7SUFDeEQ7RUFBQztJQUFBcHNCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEydUIsa0JBQUEsRUFBMEI7TUFBQSxJQUFBdHRCLE1BQUE7TUFDeEIsSUFBSSxJQUFJLENBQUN5b0IsZUFBZSxDQUFDb0MsWUFBWSxDQUFDbHNCLEtBQUssSUFBSSxJQUFJLENBQUM4cEIsZUFBZSxDQUFDMEMsUUFBUSxDQUFDeHNCLEtBQUssSUFBSSxJQUFJLENBQUM4cEIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssRUFBRTtRQUN2SCxJQUFNNHRCLHFCQUFxQixHQUFHdHVCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUN1cUIsZUFBZSxDQUFDK0QscUJBQXFCLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLElBQU1jLHNCQUFzQixHQUFHLENBQUM7UUFDaEMsSUFBTXpaLE9BQU8sR0FBRyxJQUFJLENBQUMyVSxlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDK3RCLFlBQVksQ0FDOUQsSUFBSSxDQUFDakUsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssRUFDakM0dEIscUJBQXFCLEVBQ3JCZ0Isc0JBQXNCLEVBQ3RCekcsK0VBQWlCLEVBQ2pCQywrRUFDRixDQUFDLENBQ0V0UixJQUFJLENBQUMsVUFBQU8sSUFBQSxFQUFjO1VBQUEsSUFBWkMsTUFBTSxHQUFBRCxJQUFBLENBQU5DLE1BQU07VUFDWixJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CalcsTUFBSSxDQUFDeW9CLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ2xzQixLQUFLLEdBQUcsQ0FBQztVQUM3QztRQUNGLENBQUMsQ0FBQyxDQUNEb1gsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7VUFDVjFJLE1BQUksQ0FBQ3dILE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFUyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO01BQ047SUFDRjtFQUFDO0lBQUFqSyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNnVCLGdCQUFnQjdDLEdBQWdCLEVBQVE7TUFDdEMsSUFBSSxDQUFDbEMsZUFBZSxDQUFDVixTQUFTLENBQUNwcEIsS0FBSyxHQUFHZ3NCLEdBQUc7SUFDNUM7RUFBQztJQUFBbHNCLEdBQUE7SUFBQUUsS0FBQSxXQUFBdVcsS0FBQWxCLEVBQUE7TUFBQSxRQUFBb1QsS0FBQSxHQUFBQSxLQUFBLElBQUFuVCw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFDLFFBQVc0QyxNQUFjO1FBQUEsSUFBQTJLLE1BQUE7UUFBQSxPQUFBeE4sMklBQUEsVUFBQUksU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxPQUFBRixRQUFBLENBQUFTLE1BQUEsV0FDaEIsSUFBSXFCLE9BQU8sQ0FBQyxVQUFBMEIsT0FBTyxFQUFJO2dCQUM1QixJQUFJLENBQUMySixNQUFJLENBQUNxSCxhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxFQUFFO2tCQUN4QytpQixNQUFJLENBQUNnTSxXQUFXLENBQUMzVyxNQUFNLENBQUM7a0JBRXhCZ0IsT0FBTyxDQUFDLENBQUM7a0JBRVQ7Z0JBQ0Y7Z0JBRUEySixNQUFJLENBQUMrRyxlQUFlLENBQUNvRCxtQkFBbUIsQ0FBQ2xzQixHQUFHLENBQUMraEIsTUFBSSxDQUFDcUgsYUFBYSxDQUFDMEUsVUFBVSxDQUFDbEwsU0FBUyxDQUFDLFVBQUFrTCxVQUFVLEVBQUk7a0JBQ2pHLElBQUksQ0FBQ0EsVUFBVSxFQUFFO29CQUNmL0wsTUFBSSxDQUFDZ00sV0FBVyxDQUFDM1csTUFBTSxDQUFDO29CQUN4QmdCLE9BQU8sQ0FBQyxDQUFDO2tCQUNYO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2NBQ0wsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF4RCxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNILElBQUFnQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQSt1QixZQUFvQjNXLE1BQWMsRUFBUTtNQUN4QyxJQUFJLElBQUksQ0FBQzBSLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssRUFBRTtRQUMzQyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDa3VCLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQ3BFLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssQ0FBQ211QixTQUFTLEdBQUcsSUFBSTtNQUMxRDtNQUVBLElBQUksQ0FBQ3JFLGVBQWUsQ0FBQ29ELG1CQUFtQixDQUFDL3NCLE9BQU8sQ0FBQyxDQUFDO01BRWxELElBQUksQ0FBQzZ1QixnQkFBZ0IsQ0FBQzVXLE1BQU0sQ0FBQztNQUU3QixJQUFJLENBQUMwUixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsMkRBQW9CO0lBQ3pEO0VBQUM7SUFBQTF0QixHQUFBO0lBQUFFLEtBQUEsV0FBQWl2QixPQUFBO01BQUEsUUFBQXZHLE9BQUEsR0FBQUEsT0FBQSxJQUFBcFQsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBa0IsU0FBQTtRQUFBLE9BQUFsQiwySUFBQSxVQUFBbUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FBQSxLQUNNLElBQUksQ0FBQ2tVLHNCQUFzQixDQUFDeE4sV0FBVyxDQUFDeGMsS0FBSztnQkFBQTJXLFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQy9DLElBQUksQ0FBQ2dVLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQy9xQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUEyVyxTQUFBLENBQUFOLE1BQUEsV0FFdkMsSUFBSSxDQUFDNlksNkJBQTZCLENBQUMsSUFBSSxDQUFDbEYsc0JBQXNCLENBQUN4TixXQUFXLENBQUN4YyxLQUFLLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTJXLFNBQUEsQ0FBQUosSUFBQTtVQUFBO1FBQUEsR0FBQUUsUUFBQTtNQUFBLENBRTNGLElBQUFELEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbXZCLEtBQUEsRUFBYTtNQUNYLElBQU1qRyxZQUFZLEdBQUcsSUFBSSxDQUFDWSxlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLO01BRTVELElBQUlrcEIsWUFBWSxFQUFFO1FBQ2hCQSxZQUFZLENBQUNrRyxLQUFLLEdBQUcsSUFBSTtNQUMzQjtJQUNGO0VBQUM7SUFBQXR2QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcXZCLE9BQUEsRUFBZTtNQUNiLElBQU1uRyxZQUFZLEdBQUcsSUFBSSxDQUFDWSxlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLO01BRTVELElBQUlrcEIsWUFBWSxFQUFFO1FBQ2hCQSxZQUFZLENBQUNrRyxLQUFLLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUN0RixlQUFlLENBQUNlLFNBQVMsQ0FBQzdxQixLQUFLLEdBQUcsS0FBSztNQUM5QztJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLFdBQUFHLFFBQUE7TUFBQSxRQUFBd29CLFFBQUEsR0FBQUEsUUFBQSxJQUFBclQsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBZ0YsU0FBQTtRQUFBLElBQUEwSSxNQUFBO1FBQUEsT0FBQTFOLDJJQUFBLFVBQUFvRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQTlFLElBQUE7WUFBQTtjQUFBLE9BQUE4RSxTQUFBLENBQUF2RSxNQUFBLFdBQ1MsSUFBSSxDQUFDRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQ08sSUFBSSxDQUFDLFlBQU07Z0JBQ3BEbU0sTUFBSSxDQUFDNkcsZUFBZSxDQUFDaUQsa0JBQWtCLENBQUM1c0IsT0FBTyxDQUFDLENBQUM7Z0JBQ2pEOGlCLE1BQUksQ0FBQ21ILGFBQWEsQ0FBQ2tGLFVBQVUsR0FBRyxJQUFJO2NBQ3RDLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBMVUsU0FBQSxDQUFBckUsSUFBQTtVQUFBO1FBQUEsR0FBQWdFLFFBQUE7TUFBQSxDQUNILElBQUEvRCxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXV2QixPQUFPbm1CLEtBQXVCLEVBQU87TUFDbkMsSUFBTTJKLEdBQUcsR0FBRzdKLHlFQUF5QixDQUFDRSxLQUFLLENBQUMsQ0FBQ2tCLEdBQUc7TUFFaEQsSUFBSXlJLEdBQUcsRUFBRTtRQUNQLE9BQU9BLEdBQUc7TUFDWjtNQUVBLElBQUksQ0FBQ2xLLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDRDQUE0QyxFQUFFbkIsNERBQXNCLENBQUM7TUFFdkYsT0FBTyxJQUFJMUIsR0FBRyxDQUFDMEIsNERBQXNCLENBQUM7SUFDeEM7RUFBQztJQUFBN0gsR0FBQTtJQUFBRSxLQUFBLFdBQUFpdUIsTUFBQTtNQUFBLFFBQUFyRixNQUFBLEdBQUFBLE1BQUEsSUFBQXRULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQWdOLFNBQUE7UUFBQSxPQUFBaE4sMklBQUEsVUFBQW1OLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBOU0sSUFBQSxHQUFBOE0sU0FBQSxDQUFBN00sSUFBQTtZQUFBO2NBQUEsS0FDTSxJQUFJLENBQUNzVSxhQUFhLENBQUNrRixVQUFVO2dCQUFBM00sU0FBQSxDQUFBN00sSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDekIsSUFBSXZRLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQztZQUFBO2NBQUEsS0FHN0MsSUFBSSxDQUFDNmtCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLO2dCQUFBMmlCLFNBQUEsQ0FBQTdNLElBQUE7Z0JBQUE7Y0FBQTtjQUNyQyxJQUFJLENBQUNqTixPQUFPLENBQUNDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQztjQUFDLE9BQUE2WixTQUFBLENBQUF0TSxNQUFBO1lBQUE7Y0FLbkUsSUFBSSxDQUFDK1QsYUFBYSxDQUFDMEUsVUFBVSxDQUFDOXVCLEtBQUssR0FBRyxJQUFJO2NBQUMsT0FBQTJpQixTQUFBLENBQUF0TSxNQUFBLFdBRXBDLElBQUksQ0FBQ21aLFlBQVksQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE3TSxTQUFBLENBQUFwTSxJQUFBO1VBQUE7UUFBQSxHQUFBZ00sUUFBQTtNQUFBLENBQzNCLElBQUEvTCxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUF3dkIsYUFBQTtNQUFBLFFBQUEzRyxhQUFBLEdBQUFBLGFBQUEsSUFBQXZULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQWthLFNBQUE7UUFBQSxJQUFBQyxNQUFBO1FBQUEsSUFBQXRtQixLQUFBLEVBQUF1bUIsbUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsS0FBQSxFQUFBQyxnQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxNQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLE9BQUEsRUFBQUMsa0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsT0FBQSxFQUFBQyxrQkFBQSxFQUFBQywwQkFBQSxFQUFBQyxvQkFBQSxFQUFBbm1CLEdBQUEsRUFBQW9tQiwyQkFBQSxFQUFBQyxZQUFBO1FBQUEsT0FBQXBiLDJJQUFBLFVBQUFxYixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWhiLElBQUEsR0FBQWdiLFNBQUEsQ0FBQS9hLElBQUE7WUFBQTtjQUNRMU0sS0FBdUIsR0FBRyxJQUFJLENBQUN3Z0IsYUFBYSxDQUFDeGdCLEtBQUssQ0FBQ3BKLEtBQUs7Y0FDeEQydkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFDOUMsaUJBQWlCLENBQUM4QyxtQkFBbUIsQ0FBQyxDQUFDO2NBQUEsSUFFbkV6bUIsc0ZBQXNDLENBQUNFLEtBQUssQ0FBQztnQkFBQXluQixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDaEQsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsNEJBQTRCLEVBQUVGLEtBQUssQ0FBQztjQUN2RCxJQUFJLENBQUMwZ0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLGdFQUF5QjtjQUM1RCxJQUFJLENBQUMxRCxlQUFlLENBQUNxQixVQUFVLENBQUNuckIsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDb3FCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE2d0IsU0FBQSxDQUFBeGEsTUFBQTtZQUFBO2NBQUEsS0FLMUMsSUFBSSxDQUFDNlQsdUJBQXVCLENBQUNWLDRCQUE0QjtnQkFBQXFILFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUFBOFoscUJBQUEsR0FDekJrQiw0R0FBc0QsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDNUcsdUJBQXVCLENBQUNWLDRCQUE0QixDQUFDLEVBQXJKcUcsS0FBSyxHQUFBRCxxQkFBQSxDQUFMQyxLQUFLLEVBQUVDLGdCQUFnQixHQUFBRixxQkFBQSxDQUFoQkUsZ0JBQWdCO2NBQUEsSUFFekJELEtBQUs7Z0JBQUFnQixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDUixJQUFJLENBQUNqTixPQUFPLENBQUNTLEtBQUssQ0FBQ3dtQixnQkFBZ0IsQ0FBQztjQUNwQyxJQUFJLENBQUNoRyxlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsc0VBQStCO2NBQ2xFLElBQUksQ0FBQzFELGVBQWUsQ0FBQ3FCLFVBQVUsQ0FBQ25yQixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNvcUIsYUFBYSxDQUFDMEUsVUFBVSxDQUFDOXVCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTZ3QixTQUFBLENBQUF4YSxNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUM2VCx1QkFBdUIsQ0FBQ1QsNEJBQTRCO2dCQUFBb0gsU0FBQSxDQUFBL2EsSUFBQTtnQkFBQTtjQUFBO2NBQUFpYSxzQkFBQSxHQUN6QmUsNEdBQXNELENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQzVHLHVCQUF1QixDQUFDVCw0QkFBNEIsQ0FBQyxFQUFySm9HLE1BQUssR0FBQUUsc0JBQUEsQ0FBTEYsS0FBSyxFQUFFQyxpQkFBZ0IsR0FBQUMsc0JBQUEsQ0FBaEJELGdCQUFnQjtjQUFBLElBRXpCRCxNQUFLO2dCQUFBZ0IsU0FBQSxDQUFBL2EsSUFBQTtnQkFBQTtjQUFBO2NBQ1IsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUN3bUIsaUJBQWdCLENBQUM7Y0FDcEMsSUFBSSxDQUFDaEcsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLHNFQUErQjtjQUNsRSxJQUFJLENBQUMxRCxlQUFlLENBQUNxQixVQUFVLENBQUNuckIsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDb3FCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE2d0IsU0FBQSxDQUFBeGEsTUFBQTtZQUFBO2NBQUEsS0FNNUMsSUFBSSxDQUFDNlQsdUJBQXVCLENBQUNSLHNCQUFzQjtnQkFBQW1ILFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUFBb2EscUJBQUEsR0FDbkJhLGlHQUEyQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM3Ryx1QkFBdUIsQ0FBQ1Isc0JBQXNCLENBQUMsRUFBcEltRyxPQUFLLEdBQUFLLHFCQUFBLENBQUxMLEtBQUssRUFBRUMsa0JBQWdCLEdBQUFJLHFCQUFBLENBQWhCSixnQkFBZ0I7Y0FBQSxJQUV6QkQsT0FBSztnQkFBQWdCLFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDd21CLGtCQUFnQixDQUFDO2NBQ3BDLElBQUksQ0FBQ2hHLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QixzRUFBK0I7Y0FDbEUsSUFBSSxDQUFDMUQsZUFBZSxDQUFDcUIsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ29xQixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNndCLFNBQUEsQ0FBQXhhLE1BQUE7WUFBQTtjQUFBLEtBTTVDLElBQUksQ0FBQzZULHVCQUF1QixDQUFDUCxzQkFBc0I7Z0JBQUFrSCxTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FBQXVhLHNCQUFBLEdBQ25CVSxpR0FBMkMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDN0csdUJBQXVCLENBQUNQLHNCQUFzQixDQUFDLEVBQXBJa0csT0FBSyxHQUFBUSxzQkFBQSxDQUFMUixLQUFLLEVBQUVDLGtCQUFnQixHQUFBTyxzQkFBQSxDQUFoQlAsZ0JBQWdCO2NBQUEsSUFFekJELE9BQUs7Z0JBQUFnQixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDUixJQUFJLENBQUNqTixPQUFPLENBQUNTLEtBQUssQ0FBQ3dtQixrQkFBZ0IsQ0FBQztjQUNwQyxJQUFJLENBQUNoRyxlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsc0VBQStCO2NBQ2xFLElBQUksQ0FBQzFELGVBQWUsQ0FBQ3FCLFVBQVUsQ0FBQ25yQixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNvcUIsYUFBYSxDQUFDMEUsVUFBVSxDQUFDOXVCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTZ3QixTQUFBLENBQUF4YSxNQUFBO1lBQUE7Y0FBQSxNQU01QyxJQUFJLENBQUM2VCx1QkFBdUIsQ0FBQ1osb0JBQW9CLENBQUN0cEIsS0FBSyxJQUFJLElBQUksQ0FBQ2txQix1QkFBdUIsQ0FBQ1gsMkJBQTJCLENBQUN2cEIsS0FBSztnQkFBQTZ3QixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDM0gsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsK0ZBQStGLENBQUM7Y0FDbkgsSUFBSSxDQUFDd2dCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QixzRUFBK0I7Y0FDbEUsSUFBSSxDQUFDMUQsZUFBZSxDQUFDcUIsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ29xQixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNndCLFNBQUEsQ0FBQXhhLE1BQUE7WUFBQTtjQUt4Q21hLDBCQUEwQixHQUFHLE9BQU8sSUFBSSxDQUFDdEcsdUJBQXVCLENBQUNWLDRCQUE0QixLQUFLLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQ1UsdUJBQXVCLENBQUNULDRCQUE0QixLQUFLLFVBQVU7Y0FDL0xnSCxvQkFBb0IsR0FBRyxPQUFPLElBQUksQ0FBQ3ZHLHVCQUF1QixDQUFDUixzQkFBc0IsS0FBSyxVQUFVLElBQUksT0FBTyxJQUFJLENBQUNRLHVCQUF1QixDQUFDUCxzQkFBc0IsS0FBSyxVQUFVO2NBQUEsTUFFL0s2RywwQkFBMEIsSUFBSUMsb0JBQW9CO2dCQUFBSSxTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDcEQsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsNkhBQTZILENBQUM7Y0FDakosSUFBSSxDQUFDd2dCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QixzRUFBK0I7Y0FDbEUsSUFBSSxDQUFDMUQsZUFBZSxDQUFDcUIsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ29xQixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNndCLFNBQUEsQ0FBQXhhLE1BQUE7WUFBQTtjQUFBLEtBSzFDLElBQUksQ0FBQzZULHVCQUF1QixDQUFDWixvQkFBb0IsQ0FBQ3RwQixLQUFLO2dCQUFBNndCLFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLElBQ3BEclEsaUdBQThDO2dCQUFBb3JCLFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUNqRCxJQUFJLENBQUNqTixPQUFPLENBQUNTLEtBQUssQ0FBQyxpREFBaUQsQ0FBQztjQUNyRSxJQUFJLENBQUN3Z0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLHNFQUErQjtjQUNsRSxJQUFJLENBQUMxRCxlQUFlLENBQUNxQixVQUFVLENBQUNuckIsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDb3FCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE2d0IsU0FBQSxDQUFBeGEsTUFBQTtZQUFBO2NBQUEsSUFLekNtYSwwQkFBMEI7Z0JBQUFLLFNBQUEsQ0FBQS9hLElBQUE7Z0JBQUE7Y0FBQTtjQUM3QixJQUFJLENBQUNqTixPQUFPLENBQUNTLEtBQUssQ0FBQyxxR0FBcUcsQ0FBQztjQUN6SCxJQUFJLENBQUN3Z0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLHNFQUErQjtjQUNsRSxJQUFJLENBQUMxRCxlQUFlLENBQUNxQixVQUFVLENBQUNuckIsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDb3FCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE2d0IsU0FBQSxDQUFBeGEsTUFBQTtZQUFBO2NBQUF3YSxTQUFBLENBQUEvYSxJQUFBO2NBQUE7WUFBQTtjQUFBLEtBSzFDMGEsMEJBQTBCO2dCQUFBSyxTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDNUIsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLHFHQUFxRyxDQUFDO2NBQ3hILElBQUksQ0FBQ3dnQixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsc0VBQStCO2NBQ2xFLElBQUksQ0FBQzFELGVBQWUsQ0FBQ3FCLFVBQVUsQ0FBQ25yQixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNvcUIsYUFBYSxDQUFDMEUsVUFBVSxDQUFDOXVCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTZ3QixTQUFBLENBQUF4YSxNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUM2VCx1QkFBdUIsQ0FBQ1gsMkJBQTJCLENBQUN2cEIsS0FBSztnQkFBQTZ3QixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxJQUMzRHJRLHdHQUFxRDtnQkFBQW9yQixTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDeEQsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsdURBQXVELENBQUM7Y0FDM0UsSUFBSSxDQUFDd2dCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QixzRUFBK0I7Y0FDbEUsSUFBSSxDQUFDMUQsZUFBZSxDQUFDcUIsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ29xQixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNndCLFNBQUEsQ0FBQXhhLE1BQUE7WUFBQTtjQUFBLElBS3pDb2Esb0JBQW9CO2dCQUFBSSxTQUFBLENBQUEvYSxJQUFBO2dCQUFBO2NBQUE7Y0FDdkIsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMseUdBQXlHLENBQUM7Y0FDN0gsSUFBSSxDQUFDd2dCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QixzRUFBK0I7Y0FDbEUsSUFBSSxDQUFDMUQsZUFBZSxDQUFDcUIsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ29xQixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNndCLFNBQUEsQ0FBQXhhLE1BQUE7WUFBQTtjQUFBd2EsU0FBQSxDQUFBL2EsSUFBQTtjQUFBO1lBQUE7Y0FBQSxLQUsxQzJhLG9CQUFvQjtnQkFBQUksU0FBQSxDQUFBL2EsSUFBQTtnQkFBQTtjQUFBO2NBQ3RCLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ1MsS0FBSyx5R0FBeUcsQ0FBQztjQUM1SCxJQUFJLENBQUN3Z0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLHNFQUErQjtjQUNsRSxJQUFJLENBQUMxRCxlQUFlLENBQUNxQixVQUFVLENBQUNuckIsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDb3FCLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUE2d0IsU0FBQSxDQUFBeGEsTUFBQTtZQUFBO2NBTWhELElBQUksQ0FBQzJZLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztjQUNyQyxJQUFJLENBQUNsRixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsNERBQXFCO2NBQ3hELElBQUksQ0FBQzFELGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQ3ZyQixLQUFLLEdBQUcsSUFBSTtjQUVuQ3NLLEdBQUcsR0FBRyxJQUFJLENBQUNpbEIsTUFBTSxDQUFDbm1CLEtBQUssQ0FBQztjQUU5QixJQUFJLENBQUMwZ0IsZUFBZSxDQUFDMkUsV0FBVyxDQUFDenRCLEdBQUcsQ0FDbEMsSUFBSSxDQUFDOG9CLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDL0csU0FBUyxDQUFDLFVBQUErRyxLQUFLLEVBQUk7Z0JBQzVDLElBQUlBLEtBQUssS0FBSzZDLHlEQUFrQixJQUFJN0MsS0FBSyxLQUFLNkMsOERBQXVCLEVBQUU7a0JBQ3JFd0QscUZBQW9DLENBQUMxbUIsR0FBRyxDQUFDO2dCQUMzQztjQUNGLENBQUMsQ0FDSCxDQUFDO2NBRUtvbUIsMkJBQWdELEdBQUcsU0FBbkRBLDJCQUFnREEsQ0FBQTtnQkFBQSxPQUFTLElBQUloWixPQUFPLENBQUMsVUFBQzBCLE9BQU8sRUFBVztrQkFDNUY7a0JBQ0FzVyxNQUFJLENBQUN0RixhQUFhLENBQUMwRSxVQUFVLENBQUM5dUIsS0FBSyxHQUFHLEtBQUs7a0JBRTNDLE9BQU9vWixPQUFPLENBQUNzVyxNQUFJLENBQUN1QixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQztjQUFBO2NBQ0lOLFlBQVksR0FBR08scUVBQW9CLENBQUM5bkIsS0FBSyxFQUFFLElBQUksQ0FBQzBnQixlQUFlLEVBQUUsSUFBSSxDQUFDRSxzQkFBc0IsRUFBRSxJQUFJLENBQUNFLHVCQUF1QixFQUFFd0csMkJBQTJCLENBQUM7Y0FBQSxJQUV6SkMsWUFBWTtnQkFBQUUsU0FBQSxDQUFBL2EsSUFBQTtnQkFBQTtjQUFBO2NBQ2YsSUFBSSxDQUFDc1UsYUFBYSxDQUFDMEUsVUFBVSxDQUFDOXVCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQTZ3QixTQUFBLENBQUF4YSxNQUFBO1lBQUE7Y0FBQSxPQUFBd2EsU0FBQSxDQUFBeGEsTUFBQSxXQUt2Q3NhLFlBQVksQ0FBQzFDLEtBQUssQ0FDdkIzakIsR0FBRyxFQUNIbEIsS0FBSyxFQUNMdW1CLG1CQUFtQixFQUNuQixJQUFJLENBQUNULDZCQUE2QixDQUFDdmQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzdDbUYsSUFBSSxDQUFDLFlBQU07Z0JBQ1Y0WSxNQUFJLENBQUM1RixlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsQ0FBQyxDQUFDLENBQ0RvWCxLQUFLLENBQUMsVUFBQXJOLENBQUMsRUFBSTtnQkFDVjRsQixtQkFBbUIsQ0FBQ3puQixJQUFJLENBQUMsQ0FBQztnQkFFMUJ3bkIsTUFBSSxDQUFDNUYsZUFBZSxDQUFDd0MsWUFBWSxDQUFDdHNCLEtBQUssRUFBRTtnQkFFekMwdkIsTUFBSSxDQUFDNUYsZUFBZSxDQUFDdUIsTUFBTSxDQUFDcnJCLEtBQUssR0FBRyxLQUFLO2dCQUV6QzB2QixNQUFJLENBQUNWLGdCQUFnQixDQUFDLG1DQUFtQyxDQUFDO2dCQUUxRFUsTUFBSSxDQUFDNUYsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLG9FQUE2QjtnQkFFaEVrQyxNQUFJLENBQUM3bUIsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVTLENBQUMsQ0FBQztjQUNsRCxDQUFDLENBQUMsQ0FDRG9uQixPQUFPLENBQUMsWUFBTTtnQkFDYnpCLE1BQUksQ0FBQ3RGLGFBQWEsQ0FBQzBFLFVBQVUsQ0FBQzl1QixLQUFLLEdBQUcsS0FBSztnQkFFM0MsSUFBSTB2QixNQUFJLENBQUM1RixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEtBQUt3dEIsMkRBQW9CLElBQUksQ0FBQzdsQixpRUFBMkIsRUFBRTtrQkFDN0Y7Z0JBQ0Y7Z0JBRUEsSUFBTXlwQixTQUFTLEdBQUd2ckIsVUFBVSxDQUFDLFlBQU07a0JBQ2pDLElBQU1zUCxPQUFPLEdBQUd1YSxNQUFJLENBQUN1QixtQkFBbUIsQ0FBQyxDQUFDLENBQ3ZDN1osS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7b0JBQ1YybEIsTUFBSSxDQUFDN21CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLGdDQUFnQyxFQUFFUyxDQUFDLENBQUM7a0JBQ3pELENBQUMsQ0FBQztnQkFDTixDQUFDLEVBQUUybEIsTUFBSSxDQUFDMkIsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUUzQjNCLE1BQUksQ0FBQzVGLGVBQWUsQ0FBQzJFLFdBQVcsQ0FBQ3p0QixHQUFHLENBQUMsSUFBSUMsc0RBQVUsQ0FBQyxZQUFNO2tCQUN4RDJjLFlBQVksQ0FBQ3dULFNBQVMsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7Y0FDTCxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQVAsU0FBQSxDQUFBdGEsSUFBQTtVQUFBO1FBQUEsR0FBQWtaLFFBQUE7TUFBQSxDQUNMLElBQUFqWixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUF5dEIsaUJBQUE7TUFBQSxRQUFBM0UsaUJBQUEsR0FBQUEsaUJBQUEsSUFBQXhULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQStiLFNBQUE7UUFBQSxJQUFBbmMsT0FBQTtRQUFBLE9BQUFJLDJJQUFBLFVBQUFnYyxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTNiLElBQUEsR0FBQTJiLFNBQUEsQ0FBQTFiLElBQUE7WUFBQTtjQUFBLEtBQ00sSUFBSSxDQUFDc1UsYUFBYSxDQUFDa0YsVUFBVTtnQkFBQWtDLFNBQUEsQ0FBQTFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ3pCLElBQUl2USxLQUFLLENBQUMsOEJBQThCLENBQUM7WUFBQTtjQUFBLEtBRzdDLElBQUksQ0FBQ3lrQixzQkFBc0IsQ0FBQ3hOLFdBQVcsQ0FBQ3hjLEtBQUs7Z0JBQUF3eEIsU0FBQSxDQUFBMWIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQTBiLFNBQUEsQ0FBQW5iLE1BQUEsV0FDeEMsSUFBSSxDQUFDNlksNkJBQTZCLENBQUMsSUFBSSxDQUFDbEYsc0JBQXNCLENBQUN4TixXQUFXLENBQUN4YyxLQUFLLENBQUM7WUFBQTtjQUcxRixJQUFJLElBQUksQ0FBQzRwQixhQUFhLENBQUN4Z0IsS0FBSyxDQUFDcEosS0FBSyxFQUFFO2dCQUM1Qm1WLE9BQU8sR0FBRyxJQUFJLENBQUM4WSxLQUFLLENBQUMsQ0FBQztjQUM5QjtZQUFDO1lBQUE7Y0FBQSxPQUFBdUQsU0FBQSxDQUFBamIsSUFBQTtVQUFBO1FBQUEsR0FBQSthLFFBQUE7TUFBQSxDQUNGLElBQUE5YSxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUF5eEIsS0FBQTtNQUFBLFFBQUExSSxLQUFBLEdBQUFBLEtBQUEsSUFBQXpULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQW1jLFNBQUE7UUFBQSxJQUFBbFYsV0FBQTtRQUFBLE9BQUFqSCwySUFBQSxVQUFBb2MsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUEvYixJQUFBLEdBQUErYixTQUFBLENBQUE5YixJQUFBO1lBQUE7Y0FDUTBHLFdBQVcsR0FBRyxJQUFJLENBQUN3TixzQkFBc0IsQ0FBQ3hOLFdBQVcsQ0FBQ3hjLEtBQUs7Y0FBQSxJQUU1RHdjLFdBQVc7Z0JBQUFvVixTQUFBLENBQUE5YixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBOGIsU0FBQSxDQUFBdmIsTUFBQSxXQUNQLElBQUksQ0FBQzRYLEtBQUssQ0FBQyxDQUFDO1lBQUE7Y0FBQSxPQUFBMkQsU0FBQSxDQUFBdmIsTUFBQSxXQUdkLElBQUksQ0FBQzZZLDZCQUE2QixDQUFDMVMsV0FBVyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFvVixTQUFBLENBQUFyYixJQUFBO1VBQUE7UUFBQSxHQUFBbWIsUUFBQTtNQUFBLENBQ3ZELElBQUFsYixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXF4QixpQkFBQSxFQUFtQztNQUNqQyxRQUFRLElBQUksQ0FBQ3ZILGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUs7UUFDdEMsS0FBS3d0QiwyREFBb0I7UUFDekIsS0FBS0EsMkRBQW9CO1VBQ3ZCLE9BQU9qRixvQ0FBb0M7UUFDN0MsS0FBS2lGLHlEQUFrQjtRQUN2QixLQUFLQSw4REFBdUI7UUFDNUIsS0FBS0EsZ0VBQXlCO1FBQzlCLEtBQUtBLGlFQUEwQjtRQUMvQixLQUFLQSw4REFBdUI7UUFDNUIsS0FBS0EsMkRBQW9CO1FBQ3pCLEtBQUtBLDREQUFxQjtRQUMxQixLQUFLQSwyREFBb0I7UUFDekIsS0FBS0EsMERBQW1CO1FBQ3hCLEtBQUtBLGdFQUF5QjtRQUM5QixLQUFLQSxzRUFBK0I7UUFDcEMsS0FBS0Esc0VBQStCO1FBQ3BDLEtBQUtBLCtFQUF3QztRQUM3QyxLQUFLQSxtRUFBNEI7UUFDakMsS0FBS0Esb0VBQTZCO1VBQ2hDO1VBQ0EsT0FBTyxJQUFJLENBQUNoWixtQkFBbUIsQ0FBQzJDLDJDQUEyQyxDQUFDLElBQUksQ0FBQzJTLGVBQWUsQ0FBQ3dDLFlBQVksQ0FBQ3RzQixLQUFLLENBQUM7UUFDdEg7VUFDRW9OLGlFQUFpQixDQUFDLElBQUksQ0FBQzBjLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssQ0FBQztNQUN2RDtJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLFdBQUFpeEIsb0JBQUE7TUFBQSxRQUFBakksb0JBQUEsR0FBQUEsb0JBQUEsSUFBQTFULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQXNjLFNBQUE7UUFBQSxPQUFBdGMsMklBQUEsVUFBQXVjLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBbGMsSUFBQSxHQUFBa2MsU0FBQSxDQUFBamMsSUFBQTtZQUFBO2NBQUFpYyxTQUFBLENBQUE1VyxFQUFBLEdBQ1UsSUFBSSxDQUFDMk8sZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSztjQUFBK3hCLFNBQUEsQ0FBQWpjLElBQUEsR0FBQWljLFNBQUEsQ0FBQTVXLEVBQUEsS0FDakNxUyx5REFBa0IsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDbEJxUyxnRUFBeUIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDekJxUywyREFBb0IsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDcEJxUywyREFBb0IsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDcEJxUyw4REFBdUIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDdkJxUywrRUFBd0MsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDeENxUyxtRUFBNEIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FDNUJxUyxvRUFBNkIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJN0JxUyxnRUFBeUIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJekJxUyxpRUFBMEIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJMUJxUyw4REFBdUIsT0FBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJdkJxUywyREFBb0IsUUFBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJcEJxUywyREFBb0IsUUFBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJcEJxUywwREFBbUIsUUFBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJbkJxUyw0REFBcUIsUUFBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJckJxUyxzRUFBK0IsUUFBQXVFLFNBQUEsQ0FBQTVXLEVBQUEsS0FJL0JxUyxzRUFBK0I7Y0FBQTtZQUFBO2NBbkNsQyxJQUFJLENBQUMza0IsT0FBTyxDQUFDQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsSUFBSSxDQUFDZ2hCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssRUFBRXd0QixtREFBWSxDQUFDLElBQUksQ0FBQzFELGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssQ0FBQyxDQUFDO2NBQUMsT0FBQSt4QixTQUFBLENBQUExYixNQUFBO1lBQUE7Y0FJaEosSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsaUdBQWlHLENBQUM7Y0FBQyxPQUFBaXBCLFNBQUEsQ0FBQTFiLE1BQUE7WUFBQTtjQUlySCxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyxtR0FBbUcsQ0FBQztjQUFDLE9BQUFpcEIsU0FBQSxDQUFBMWIsTUFBQTtZQUFBO2NBSXZILElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdHQUFnRyxDQUFDO2NBQUMsT0FBQWlwQixTQUFBLENBQUExYixNQUFBO1lBQUE7Y0FJcEgsSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsOENBQThDLENBQUM7Y0FBQyxPQUFBaXBCLFNBQUEsQ0FBQTFiLE1BQUE7WUFBQTtjQUlsRSxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQztjQUFDLE9BQUFpcEIsU0FBQSxDQUFBMWIsTUFBQTtZQUFBO2NBSWpFLElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGtFQUFrRSxDQUFDO2NBQUMsT0FBQWlwQixTQUFBLENBQUExYixNQUFBO1lBQUE7Y0FJdEYsSUFBSSxDQUFDeE4sT0FBTyxDQUFDQyxJQUFJLENBQUMsc0RBQXNELENBQUM7Y0FBQyxPQUFBaXBCLFNBQUEsQ0FBQTFiLE1BQUE7WUFBQTtjQUkxRSxJQUFJLENBQUN4TixPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQztjQUFDLE9BQUFpcEIsU0FBQSxDQUFBMWIsTUFBQTtZQUFBO2NBSTdGLElBQUksQ0FBQ3hOLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlFQUF5RSxDQUFDO2NBQUMsT0FBQWlwQixTQUFBLENBQUExYixNQUFBO1lBQUE7Y0FJN0ZqSixpRUFBaUIsQ0FBQyxJQUFJLENBQUMwYyxlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLENBQUM7WUFBQztjQUFBLE9BQUEreEIsU0FBQSxDQUFBMWIsTUFBQSxXQUdqRCxJQUFJLENBQUM0WCxLQUFLLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBOEQsU0FBQSxDQUFBeGIsSUFBQTtVQUFBO1FBQUEsR0FBQXNiLFFBQUE7TUFBQSxDQUNwQixJQUFBcmIsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFndkIsaUJBQUEsRUFBZ0Y7TUFBQSxJQUFBZ0QsTUFBQTtNQUFBLElBQXZENVosTUFBYyxHQUFBdEosU0FBQSxDQUFBbkYsTUFBQSxRQUFBbUYsU0FBQSxRQUFBekosU0FBQSxHQUFBeUosU0FBQSxNQUFHdVosOEJBQThCO01BQ3RFLElBQUksQ0FBQ3lCLGVBQWUsQ0FBQzJFLFdBQVcsQ0FBQ3R1QixPQUFPLENBQUMsQ0FBQztNQUUxQyxJQUFNa2EsY0FBYyxHQUFHLElBQUksQ0FBQzJQLHNCQUFzQixDQUFDM1AsY0FBYyxDQUFDcmEsS0FBSztNQUV2RSxJQUFJcWEsY0FBYyxFQUFFO1FBQ2xCLElBQUksQ0FBQzJQLHNCQUFzQixDQUFDM1AsY0FBYyxDQUFDcmEsS0FBSyxHQUFHLElBQUk7UUFDdkRxYSxjQUFjLENBQUNtSixLQUFLLENBQUMsQ0FBQztRQUN0Qm5KLGNBQWMsQ0FBQ2xhLE9BQU8sQ0FBQyxDQUFDO1FBRXhCLElBQUl3SCx5RUFBbUMsSUFBSSxFQUFFbEMsNkVBQTBCLElBQUlrQyw4RUFBd0MsQ0FBQyxFQUFFO1VBQ3BIckMseUZBQThDLENBQUMsQ0FBQztRQUNsRDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUMwa0Isc0JBQXNCLENBQUN4TixXQUFXLENBQUN4YyxLQUFLLEVBQUU7UUFDakQsSUFBSSxDQUFDZ3FCLHNCQUFzQixDQUFDeE4sV0FBVyxDQUFDeGMsS0FBSyxDQUFDNmMsU0FBUyxDQUFDLENBQUMsQ0FBQ3RRLE9BQU8sQ0FBQyxVQUFBd1EsS0FBSztVQUFBLE9BQUlBLEtBQUssQ0FBQ3hHLElBQUksQ0FBQyxDQUFDO1FBQUEsRUFBQztRQUN4RixJQUFJLENBQUN5VCxzQkFBc0IsQ0FBQ3hOLFdBQVcsQ0FBQ3hjLEtBQUssR0FBRyxJQUFJO01BQ3REO01BRUEsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQy9xQixLQUFLLEdBQUcsS0FBSztNQUM3QyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDZSxTQUFTLENBQUM3cUIsS0FBSyxHQUFHLEtBQUs7TUFDNUMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsS0FBSztNQUMxQyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDK0IsT0FBTyxDQUFDN3JCLEtBQUssR0FBRyxJQUFJO01BQ3pDLElBQUksQ0FBQzhwQixlQUFlLENBQUM2QixPQUFPLENBQUMzckIsS0FBSyxHQUFHLEtBQUs7TUFFMUMsSUFBSSxJQUFJLENBQUM4cEIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssSUFBSSxJQUFJLENBQUM4cEIsZUFBZSxDQUFDMEMsUUFBUSxDQUFDeHNCLEtBQUssRUFBRTtRQUM1RSxJQUFNbVYsT0FBTyxHQUFHLElBQUksQ0FBQzJVLGVBQWUsQ0FBQzBDLFFBQVEsQ0FBQ3hzQixLQUFLLENBQUNpeUIsYUFBYSxDQUFDLElBQUksQ0FBQ25JLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEVBQUVvWSxNQUFNLENBQUMsQ0FDekd0QixJQUFJLENBQUMsVUFBQW9iLEtBQUEsRUFBYztVQUFBLElBQVo1YSxNQUFNLEdBQUE0YSxLQUFBLENBQU41YSxNQUFNO1VBQ1osSUFBSUEsTUFBTSxLQUFLLElBQUksRUFBRTtZQUNuQjBhLE1BQUksQ0FBQ25wQixPQUFPLENBQUMyRyxJQUFJLENBQUMsZ0RBQWdELEVBQUV3aUIsTUFBSSxDQUFDanFCLFFBQVEsRUFBRXVQLE1BQU0sQ0FBQztZQUUxRjtVQUNGO1VBRUEwYSxNQUFJLENBQUNucEIsT0FBTyxDQUFDQyxJQUFJLENBQUMsd0NBQXdDLEVBQUVrcEIsTUFBSSxDQUFDanFCLFFBQVEsRUFBRXVQLE1BQU0sQ0FBQztRQUNwRixDQUFDLENBQUMsQ0FDREYsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7VUFDVmlvQixNQUFJLENBQUNucEIsT0FBTyxDQUFDUyxLQUFLLENBQUMsK0JBQStCLEVBQUUwb0IsTUFBSSxDQUFDanFCLFFBQVEsRUFBRWdDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7TUFDTjtNQUVBLElBQUksSUFBSSxDQUFDbWYsWUFBWSxJQUFJLElBQUksQ0FBQ0EsWUFBWSxDQUFDa0UsT0FBTyxFQUFFO1FBQ2xELElBQUksQ0FBQ2xFLFlBQVksQ0FBQ2tFLE9BQU8sQ0FBQzdaLFNBQVMsR0FBRyxFQUFFO1FBQ3hDLElBQUksQ0FBQzJWLFlBQVksQ0FBQ2tFLE9BQU8sQ0FBQ3JsQixRQUFRLEdBQUcsRUFBRTtNQUN6QztNQUVBLElBQUksQ0FBQytoQixlQUFlLENBQUM0QyxNQUFNLENBQUMxc0IsS0FBSyxHQUFHLElBQUk7TUFDeEMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQzBDLFFBQVEsQ0FBQ3hzQixLQUFLLEdBQUcsSUFBSTtNQUMxQyxJQUFJLENBQUNncUIsc0JBQXNCLENBQUNtSSwrQkFBK0IsR0FBRyxDQUFDO0lBQ2pFO0VBQUM7SUFBQXJ5QixHQUFBO0lBQUFFLEtBQUEsV0FBQWt2Qiw4QkFBQWxOLEdBQUE7TUFBQSxRQUFBaUgsOEJBQUEsR0FBQUEsOEJBQUEsSUFBQTNULDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQTZjLFNBQTRDNVYsV0FBd0I7UUFBQSxJQUFBNlYsTUFBQTtRQUFBLElBQUFuSixZQUFBLEVBQUFvSixXQUFBO1FBQUEsT0FBQS9jLDJJQUFBLFVBQUFnZCxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTNjLElBQUEsR0FBQTJjLFNBQUEsQ0FBQTFjLElBQUE7WUFBQTtjQUM1RG9ULFlBQVksR0FBRyxJQUFJLENBQUNZLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUs7Y0FBQSxJQUV2RGtwQixZQUFZO2dCQUFBc0osU0FBQSxDQUFBMWMsSUFBQTtnQkFBQTtjQUFBO2NBQ2YsSUFBSSxDQUFDZ1UsZUFBZSxDQUFDZSxTQUFTLENBQUM3cUIsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQy9xQixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDeUIsT0FBTyxDQUFDdnJCLEtBQUssR0FBRyxLQUFLO2NBQzFDLElBQUksQ0FBQzhwQixlQUFlLENBQUMyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7Y0FDMUMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QiwyREFBb0I7Y0FBQyxPQUFBZ0YsU0FBQSxDQUFBbmMsTUFBQTtZQUFBO2NBSzFELElBQUksQ0FBQyxJQUFJLENBQUM2VCx1QkFBdUIsQ0FBQ1gsMkJBQTJCLENBQUN2cEIsS0FBSyxFQUFFO2dCQUNuRWtwQixZQUFZLENBQUNpRixTQUFTLEdBQUczUixXQUFXO2NBQ3RDO2NBRU04VixXQUFXLEdBQUdwSixZQUFZLENBQUN1SSxJQUFJLENBQUMsQ0FBQztjQUFBLE1BRW5DYSxXQUFXLEtBQUtqdEIsU0FBUztnQkFBQW10QixTQUFBLENBQUExYyxJQUFBO2dCQUFBO2NBQUE7Y0FDM0IsSUFBSSxDQUFDZ1UsZUFBZSxDQUFDZSxTQUFTLENBQUM3cUIsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQy9xQixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUM4cEIsZUFBZSxDQUFDeUIsT0FBTyxDQUFDdnJCLEtBQUssR0FBRyxLQUFLO2NBQzFDLElBQUksQ0FBQzhwQixlQUFlLENBQUMyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLElBQUk7Y0FDekMsSUFBSSxDQUFDOHBCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QiwyREFBb0I7Y0FBQyxPQUFBZ0YsU0FBQSxDQUFBbmMsTUFBQTtZQUFBO2NBQUEsT0FBQW1jLFNBQUEsQ0FBQW5jLE1BQUEsV0FLbkRpYyxXQUFXLENBQUN4YixJQUFJLENBQUMsWUFBTTtnQkFDNUJ1YixNQUFJLENBQUN2SSxlQUFlLENBQUNlLFNBQVMsQ0FBQzdxQixLQUFLLEdBQUcsS0FBSztnQkFDNUNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDaUIsVUFBVSxDQUFDL3FCLEtBQUssR0FBRyxLQUFLO2dCQUM3Q3F5QixNQUFJLENBQUN2SSxlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7Z0JBQzFDcXlCLE1BQUksQ0FBQ3ZJLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsSUFBSTtnQkFDekNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDJEQUFvQjtjQUN6RCxDQUFDLENBQUMsQ0FBQ3BXLEtBQUssQ0FBQyxVQUFBck4sQ0FBQyxFQUFJO2dCQUNaLElBQU0wb0IsYUFBYSxHQUFHLENBQUMsQ0FBQ2pXLFdBQVcsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsQ0FBQzZWLE1BQU0sQ0FBQyxVQUFBM1YsS0FBSyxFQUFJO2tCQUM5RCxPQUFPQSxLQUFLLENBQUNsSSxJQUFJLEtBQUssT0FBTztnQkFDL0IsQ0FBQyxDQUFDO2dCQUNGLElBQU04ZCxzQ0FBc0MsR0FBRyxDQUFDaHJCLDZFQUF1QztnQkFFdkYsSUFBSWdyQixzQ0FBc0MsSUFBSXpKLFlBQVksQ0FBQ2tHLEtBQUssSUFBSSxDQUFDcUQsYUFBYSxFQUFFO2tCQUNsRkosTUFBSSxDQUFDdkksZUFBZSxDQUFDZSxTQUFTLENBQUM3cUIsS0FBSyxHQUFHLEtBQUs7a0JBQzVDcXlCLE1BQUksQ0FBQ3ZJLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQy9xQixLQUFLLEdBQUcsSUFBSTtrQkFDNUNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDeUIsT0FBTyxDQUFDdnJCLEtBQUssR0FBRyxLQUFLO2tCQUMxQ3F5QixNQUFJLENBQUN2SSxlQUFlLENBQUMyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7a0JBQzFDcXlCLE1BQUksQ0FBQ3ZJLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QiwwREFBbUI7a0JBRXRELElBQUltRixzQ0FBc0MsRUFBRTtvQkFDMUNOLE1BQUksQ0FBQ3hwQixPQUFPLENBQUNDLElBQUksQ0FBQyxtRUFBbUUsRUFBRXVwQixNQUFJLENBQUN0cUIsUUFBUSxFQUFFZ0MsQ0FBQyxDQUFDO29CQUN4R21mLFlBQVksQ0FBQ2lGLFNBQVMsR0FBRyxJQUFJO29CQUU3QjtrQkFDRjtrQkFFQSxJQUFJc0UsYUFBYSxFQUFFO29CQUNqQkosTUFBSSxDQUFDeHBCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlEQUF5RCxFQUFFdXBCLE1BQUksQ0FBQ3RxQixRQUFRLEVBQUVnQyxDQUFDLENBQUM7b0JBRTlGO2tCQUNGO2tCQUVBc29CLE1BQUksQ0FBQ3hwQixPQUFPLENBQUNDLElBQUksQ0FBQywrREFBK0QsRUFBRXVwQixNQUFJLENBQUN0cUIsUUFBUSxFQUFFZ0MsQ0FBQyxDQUFDO2tCQUVwRztnQkFDRjtnQkFFQW1mLFlBQVksQ0FBQ2tHLEtBQUssR0FBRyxJQUFJO2dCQUV6QixPQUFPbEcsWUFBWSxDQUFDdUksSUFBSSxDQUFDLENBQUMsQ0FDdkIzYSxJQUFJLENBQUMsWUFBTTtrQkFDVnViLE1BQUksQ0FBQ3hwQixPQUFPLENBQUNDLElBQUksQ0FBQyw2RUFBNkUsRUFBRXVwQixNQUFJLENBQUN0cUIsUUFBUSxDQUFDO2tCQUUvR3NxQixNQUFJLENBQUN2SSxlQUFlLENBQUNlLFNBQVMsQ0FBQzdxQixLQUFLLEdBQUcsSUFBSTtrQkFDM0NxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDaUIsVUFBVSxDQUFDL3FCLEtBQUssR0FBRyxLQUFLO2tCQUM3Q3F5QixNQUFJLENBQUN2SSxlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7a0JBQzFDcXlCLE1BQUksQ0FBQ3ZJLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsSUFBSTtrQkFDekNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDJEQUFvQjtnQkFDekQsQ0FBQyxDQUFDLENBQUNwVyxLQUFLLENBQUMsVUFBQXJOLENBQUMsRUFBSTtrQkFDWm1mLFlBQVksQ0FBQ2tHLEtBQUssR0FBRyxLQUFLO2tCQUUxQmlELE1BQUksQ0FBQ3hwQixPQUFPLENBQUNDLElBQUksQ0FBQyx5REFBeUQsRUFBRXVwQixNQUFJLENBQUN0cUIsUUFBUSxFQUFFZ0MsQ0FBQyxDQUFDO2tCQUU5RnNvQixNQUFJLENBQUN2SSxlQUFlLENBQUNlLFNBQVMsQ0FBQzdxQixLQUFLLEdBQUcsS0FBSztrQkFDNUNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDaUIsVUFBVSxDQUFDL3FCLEtBQUssR0FBRyxJQUFJO2tCQUM1Q3F5QixNQUFJLENBQUN2SSxlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7a0JBQzFDcXlCLE1BQUksQ0FBQ3ZJLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsS0FBSztrQkFDMUNxeUIsTUFBSSxDQUFDdkksZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDBEQUFtQjtnQkFDeEQsQ0FBQyxDQUFDO2NBQ04sQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnRixTQUFBLENBQUFqYyxJQUFBO1VBQUE7UUFBQSxHQUFBNmIsUUFBQTtNQUFBLENBQ0gsSUFBQTViLEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0VBQUEsT0FBQTBaLE9BQUE7QUFBQTs7Ozs7Ozs7Ozs7O0FDMThCSDtBQUNBO0FBQ0E7QUFGQSxJQUdLZ0YsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBLEVBQVpBLFlBQVk7QUFvQmpCLCtEQUFlQSxZQUFZLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QjNCO0FBQ0E7QUFDQTtBQUNrRDtBQUd6QjtBQUFBLElBY0pvRixRQUFRO0VBaUIzQixTQUFBQSxTQUFBLEVBQXNCO0lBQUF6ekIsMklBQUEsT0FBQXl6QixRQUFBO0lBQ3BCLE1BQU0sSUFBSXJ0QixLQUFLLENBQUMseURBQXlELENBQUM7RUFDNUU7RUFBQzFGLHdJQUFBLENBQUEreUIsUUFBQTtJQUFBOXlCLEdBQUE7SUFBQUUsS0FBQSxFQWxCRCxTQUFBNnlCLGNBQXFCNVgsT0FBNkIsRUFBVztNQUMzRCxJQUFJLENBQUN0VCwyREFBcUIsRUFBRTtRQUMxQixNQUFNLElBQUlwQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7TUFDdkM7TUFFQSxJQUFNdXRCLGNBQThCLEdBQUc7UUFDckMxSixTQUFTLEVBQUVuTyxPQUFPLENBQUNtTyxTQUFTO1FBQzVCSSw0QkFBNEIsRUFBRXZPLE9BQU8sQ0FBQ3VPLDRCQUE0QjtRQUNsRUMsNEJBQTRCLEVBQUV4TyxPQUFPLENBQUN3Tyw0QkFBNEI7UUFDbEVDLHNCQUFzQixFQUFFek8sT0FBTyxDQUFDeU8sc0JBQXNCO1FBQ3REQyxzQkFBc0IsRUFBRTFPLE9BQU8sQ0FBQzBPO01BQ2xDLENBQUM7TUFFRCxPQUFPLElBQUluQiw2Q0FBTyxDQUFDdk4sT0FBTyxDQUFDaU8sWUFBWSxFQUFFak8sT0FBTyxDQUFDN1IsS0FBSyxFQUFFMHBCLGNBQWMsQ0FBQztJQUN6RTtFQUFDO0VBQUEsT0FBQUYsUUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuQ0g7QUFDQTtBQUNBOztBQUV5QjtBQUNTO0FBQ1E7QUFLNUI7QUFHZCwrREFBZTtFQUNianJCLEdBQUcsRUFBSEEseUNBQUc7RUFDSGlyQixRQUFRLEVBQVJBLDhDQUFRO0VBQ1JwRixZQUFZLEVBQVpBLGtEQUFZQTtBQUNkLENBQUMsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQkQ7QUFDQTtBQUNBO0FBQ3VDO0FBQ2E7QUFDTjtBQUlyQjtBQUNvQztBQUNOO0FBR3ZELElBQU11RixnQkFBZ0IsR0FBRyxDQUFDO0FBQUMsSUFNTmhKLGNBQWM7RUE0QmpDLFNBQUFBLGVBQVk5TyxPQUErQixFQUFFO0lBQUEsSUFBQStYLGtCQUFBO0lBQUE3ekIsMklBQUEsT0FBQTRxQixjQUFBO0lBQUEzcUIsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDM0MsSUFBSSxDQUFDcXZCLFdBQVcsR0FBRyxJQUFJcHZCLHlEQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUMwdEIsa0JBQWtCLEdBQUcsSUFBSTF0Qix5REFBYyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDNnRCLG1CQUFtQixHQUFHLElBQUk3dEIseURBQWMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQ3d1QixxQkFBcUIsR0FBRyxJQUFJdnVCLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQzRwQixZQUFZLEdBQUcsSUFBSXpwQixnREFBTyxDQUFtQixJQUFJLENBQUM7SUFDdkQsSUFBSSxDQUFDa3JCLEtBQUssR0FBRyxJQUFJbHJCLGdEQUFPLENBQWUrdEIsb0VBQXFCLENBQUM7SUFDN0QsSUFBSSxDQUFDM0MsU0FBUyxHQUFHLElBQUlwckIsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7SUFDNUMsSUFBSSxDQUFDc3JCLFVBQVUsR0FBRyxJQUFJdHJCLGdEQUFPLENBQVUsS0FBSyxDQUFDO0lBQzdDLElBQUksQ0FBQzByQixVQUFVLEdBQUcsSUFBSTFyQixnREFBTyxDQUFVLElBQUksQ0FBQztJQUM1QyxJQUFJLENBQUM0ckIsTUFBTSxHQUFHLElBQUk1ckIsZ0RBQU8sQ0FBVSxJQUFJLENBQUM7SUFDeEMsSUFBSSxDQUFDOHJCLE9BQU8sR0FBRyxJQUFJOXJCLGdEQUFPLENBQVUsS0FBSyxDQUFDO0lBQzFDLElBQUksQ0FBQ2dzQixPQUFPLEdBQUcsSUFBSWhzQixnREFBTyxDQUFVLEtBQUssQ0FBQztJQUMxQyxJQUFJLENBQUNrc0IsT0FBTyxHQUFHLElBQUlsc0IsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDb3NCLE9BQU8sR0FBRyxJQUFJcHNCLGdEQUFPLENBQVUsS0FBSyxDQUFDO0lBQzFDLElBQUksQ0FBQzJwQixTQUFTLEdBQUcsSUFBSTNwQixnREFBTyxFQUFBdXpCLGtCQUFBLEdBQWMvWCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRW1PLFNBQVMsY0FBQTRKLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUlELGdCQUFnQixDQUFDO0lBQ2pGLElBQUksQ0FBQy9HLEdBQUcsR0FBRyxJQUFJdnNCLGdEQUFPLENBQWMsQ0FBQyxDQUFDO0lBQ3RDLElBQUksQ0FBQ3lzQixZQUFZLEdBQUcsSUFBSXpzQixnREFBTyxDQUFnQixDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDMnNCLFVBQVUsR0FBRyxJQUFJM3NCLGdEQUFPLENBQVkrdUIsMkRBQWUsQ0FBQztJQUN6RCxJQUFJLENBQUNsQyxZQUFZLEdBQUcsSUFBSTdzQixnREFBTyxDQUFTLENBQUMsQ0FBQztJQUMxQyxJQUFJLENBQUMrc0IsUUFBUSxHQUFHLElBQUkvc0IsZ0RBQU8sQ0FBVyxJQUFJLENBQUM7SUFDM0MsSUFBSSxDQUFDaXRCLE1BQU0sR0FBRyxJQUFJanRCLGdEQUFPLENBQVUsSUFBSSxDQUFDO0lBQ3hDLElBQUksQ0FBQzBlLGFBQWEsR0FBRyxJQUFJMWUsZ0RBQU8sQ0FBdUIsSUFBSSxDQUFDO0VBQzlEO0VBQUNJLHdJQUFBLENBQUFrcUIsY0FBQTtJQUFBanFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUI7TUFDckIsSUFBTTJzQixNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNLENBQUMxc0IsS0FBSztNQUVoQyxJQUFJLENBQUMwc0IsTUFBTSxFQUFFO1FBQ1gsT0FBTyxHQUFHO01BQ1o7TUFFQSxPQUFPQSxNQUFNLENBQUMza0IsUUFBUTtJQUN4QjtFQUFDO0lBQUFqSSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaXpCLFlBQVkzYixNQUF1QixFQUFRO01BQ3pDLFFBQVFBLE1BQU07UUFDWixLQUFLLElBQUk7VUFDUDtRQUNGLEtBQUssY0FBYztRQUNuQixLQUFLLGdCQUFnQjtRQUNyQixLQUFLLGFBQWE7VUFDaEIsSUFBSSxDQUFDNlQsVUFBVSxDQUFDbnJCLEtBQUssR0FBRyxLQUFLOztRQUUvQjtRQUNBLEtBQUssV0FBVztRQUNoQixLQUFLLFdBQVc7VUFDZCxJQUFJLENBQUNzc0IsWUFBWSxDQUFDdHNCLEtBQUssR0FBRyxDQUFDO1VBQzNCLElBQUksQ0FBQ3lyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDMnJCLE9BQU8sQ0FBQzNyQixLQUFLLEdBQUcsSUFBSTtVQUN6QixJQUFJLENBQUM2ckIsT0FBTyxDQUFDN3JCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQzBzQixNQUFNLENBQUMxc0IsS0FBSyxHQUFHLElBQUk7VUFFeEI7UUFDRjtVQUNFLElBQUksQ0FBQ3NzQixZQUFZLENBQUN0c0IsS0FBSyxFQUFFO1VBQ3pCLElBQUksQ0FBQ3lyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDMnJCLE9BQU8sQ0FBQzNyQixLQUFLLEdBQUcsSUFBSTtVQUN6QixJQUFJLENBQUM2ckIsT0FBTyxDQUFDN3JCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQzBzQixNQUFNLENBQUMxc0IsS0FBSyxHQUFHLElBQUk7VUFFeEI7TUFDSjtJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWt6Qiw4Q0FBQSxFQUFzRDtNQUNwRCxJQUFJLElBQUksQ0FBQ2hLLFlBQVksQ0FBQ2xwQixLQUFLLElBQUksSUFBSSxDQUFDa3BCLFlBQVksQ0FBQ2xwQixLQUFLLENBQUNvdEIsT0FBTyxFQUFFO1FBQzlELElBQUksQ0FBQ2xFLFlBQVksQ0FBQ2xwQixLQUFLLENBQUNvdEIsT0FBTyxDQUFDN1osU0FBUyxHQUFHNUwseURBQW1CO1FBQy9ELElBQUksQ0FBQ3VoQixZQUFZLENBQUNscEIsS0FBSyxDQUFDb3RCLE9BQU8sQ0FBQ3JsQixRQUFRLEdBQUcsSUFBSSxDQUFDQSxRQUFRO01BQzFEO0lBQ0Y7RUFBQztJQUFBakksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW16QixrQ0FBa0M3YixNQUF1QixFQUFnQjtNQUN2RSxRQUFRQSxNQUFNO1FBQ1osS0FBSyxJQUFJO1VBQ1AsT0FBT2tXLG9FQUFxQjtRQUM5QixLQUFLLFdBQVc7UUFDaEIsS0FBSyxXQUFXO1VBQ2QsT0FBT0EsbUVBQW9CO1FBQzdCLEtBQUssZ0JBQWdCO1VBQ25CLE9BQU9BLHlFQUEwQjtRQUNuQyxLQUFLLGFBQWE7VUFDaEIsT0FBT0Esc0VBQXVCO1FBQ2hDLEtBQUssY0FBYztVQUNqQixPQUFPQSx3RUFBeUI7UUFDbEMsS0FBSyxVQUFVO1FBQ2YsS0FBSyxjQUFjO1FBQ25CLEtBQUssU0FBUztVQUNaLE9BQU9BLHNFQUF1QjtRQUNoQyxLQUFLLGVBQWU7VUFDbEIsT0FBT0EsOEVBQStCO1FBQ3hDLEtBQUsseUJBQXlCO1VBQzVCLE9BQU9BLHVGQUF3QztRQUNqRCxLQUFLLFFBQVE7VUFDWCxPQUFPQSxpRUFBa0I7UUFDM0I7VUFDRXBnQixnRUFBaUIsQ0FBQ2tLLE1BQU0sQ0FBQztNQUM3QjtJQUNGO0VBQUM7RUFBQSxPQUFBeVMsY0FBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEpIO0FBQ0E7QUFDQTtBQUN1QztBQUFBLElBR2xCRSxxQkFBcUIsZ0JBQUFwcUIsd0lBQUEsQ0FLeEMsU0FBQW9xQixzQkFBQSxFQUFjO0VBQUE5cUIsMklBQUEsT0FBQThxQixxQkFBQTtFQUFBN3FCLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQ1osSUFBSSxDQUFDb2QsV0FBVyxHQUFHLElBQUkvYyxnREFBTyxDQUFjLElBQUksQ0FBQztFQUNqRCxJQUFJLENBQUM0YSxjQUFjLEdBQUcsSUFBSTVhLGdEQUFPLENBQWtCLElBQUksQ0FBQztFQUN4RCxJQUFJLENBQUMweUIsK0JBQStCLEdBQUcsQ0FBQztBQUMxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZkg7QUFDQTtBQUNBO0FBQ3VDO0FBQUEsSUFFbEI5SCxZQUFZLGdCQUFBeHFCLHdJQUFBLENBSS9CLFNBQUF3cUIsYUFBQSxFQUFjO0VBQUFsckIsMklBQUEsT0FBQWtyQixZQUFBO0VBQUFqckIsMklBQUE7RUFBQUEsMklBQUE7RUFDWixJQUFJLENBQUMwdkIsVUFBVSxHQUFHLElBQUlydkIsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7RUFDN0MsSUFBSSxDQUFDNnZCLFVBQVUsR0FBRyxLQUFLO0FBQ3pCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNaSDtBQUNBO0FBQ0E7QUFDdUM7QUFBQSxJQWFsQm5GLHNCQUFzQixnQkFBQXRxQix3SUFBQSxDQVF6QyxTQUFBc3FCLHVCQUFZbFAsT0FBc0MsRUFBRTtFQUFBOWIsMklBQUEsT0FBQWdyQixzQkFBQTtFQUFBL3FCLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQUFBLDJJQUFBO0VBQ2xELElBQUksQ0FBQ2txQixvQkFBb0IsR0FBRyxJQUFJN3BCLGdEQUFPLENBQVV3YixPQUFPLENBQUNxTyxvQkFBb0IsQ0FBQztFQUM5RSxJQUFJLENBQUNDLDJCQUEyQixHQUFHLElBQUk5cEIsZ0RBQU8sQ0FBVXdiLE9BQU8sQ0FBQ3NPLDJCQUEyQixDQUFDO0VBQzVGLElBQUksQ0FBQ0MsNEJBQTRCLEdBQUd2TyxPQUFPLENBQUN1Tyw0QkFBNEI7RUFDeEUsSUFBSSxDQUFDQyw0QkFBNEIsR0FBR3hPLE9BQU8sQ0FBQ3dPLDRCQUE0QjtFQUN4RSxJQUFJLENBQUNDLHNCQUFzQixHQUFHek8sT0FBTyxDQUFDeU8sc0JBQXNCO0VBQzVELElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcxTyxPQUFPLENBQUMwTyxzQkFBc0I7QUFDOUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9CSDtBQUNBO0FBQ0E7QUFDdUM7QUFBQSxJQUdsQkUsWUFBWSxnQkFBQWhxQix3SUFBQSxDQUkvQixTQUFBZ3FCLGFBQVl6Z0IsS0FBdUIsRUFBRTtFQUFBakssMklBQUEsT0FBQTBxQixZQUFBO0VBQUF6cUIsMklBQUE7RUFBQUEsMklBQUE7RUFDbkMsSUFBSSxDQUFDZ0ssS0FBSyxHQUFHLElBQUkzSixnREFBTyxDQUFtQjJKLEtBQUssQ0FBQztFQUNqRCxJQUFJLENBQUM2aEIsYUFBYSxHQUFHLElBQUl4ckIsZ0RBQU8sQ0FBVSxLQUFLLENBQUM7QUFDbEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FDYkg7QUFDQTtBQUNBOztBQUVBLElBQU0yekIsbUJBQW1CLEdBQUcsNkNBQTZDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0p6RTtBQUNBO0FBQ0E7QUFDK0U7QUFDbEI7QUFBQSxJQUV4Q0Msa0JBQWtCO0VBQUEsU0FBQUEsbUJBQUE7SUFBQWwwQiwySUFBQSxPQUFBazBCLGtCQUFBO0VBQUE7RUFBQXh6Qix3SUFBQSxDQUFBd3pCLGtCQUFBO0lBQUF2ekIsR0FBQTtJQUFBRSxLQUFBLEVBQ3JDLFNBQUFzekIsb0NBQTJDQyxXQUF3QixFQUFtQjtNQUNwRixRQUFRQSxXQUFXO1FBQ2pCLEtBQUtuTCwrRUFBa0I7VUFDckIsT0FBTyxRQUFRO1FBQ2pCLEtBQUtBLDhFQUFpQjtVQUNwQixPQUFPLE9BQU87UUFDaEIsS0FBS0EsOEVBQWlCO1VBQ3BCLE9BQU8sT0FBTztRQUNoQjtVQUNFaGIsZ0VBQWlCLENBQUNtbUIsV0FBVyxDQUFDO01BQ2xDO0lBQ0Y7RUFBQztFQUFBLE9BQUFGLGtCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEJIO0FBQ0E7QUFDQTtBQUNpRjtBQUNwQjtBQUFBLElBRXhDRyxtQkFBbUI7RUFBQSxTQUFBQSxvQkFBQTtJQUFBcjBCLDJJQUFBLE9BQUFxMEIsbUJBQUE7RUFBQTtFQUFBM3pCLHdJQUFBLENBQUEyekIsbUJBQUE7SUFBQTF6QixHQUFBO0lBQUFFLEtBQUEsRUFDdEMsU0FBQXl6QixzQ0FBNkNDLFlBQTBCLEVBQW9CO01BQ3pGLFFBQVFBLFlBQVk7UUFDbEIsS0FBS3ZMLDhFQUFpQjtVQUNwQixPQUFPLE1BQU07UUFDZixLQUFLQSwrRUFBa0I7VUFDckIsT0FBTyxPQUFPO1FBQ2hCO1VBQ0UvYSxnRUFBaUIsQ0FBQ3NtQixZQUFZLENBQUM7TUFDbkM7SUFDRjtFQUFDO0VBQUEsT0FBQUYsbUJBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQkg7QUFDQTtBQUNBOztBQUV5QjtBQUN5QjtBQUVsRCxJQUFNRyxzQkFBc0IsR0FBRyxLQUFLO0FBQUMsSUFJaEIzQyxTQUFTLDBCQUFBNEMsaUNBQUEsRUFBQUMsbUNBQUE7RUF1QzVCLFNBQUE3QyxVQUFBLEVBQXNCO0lBQUE3eEIsMklBQUEsT0FBQTZ4QixTQUFBO0lBQ3BCLE1BQU0sSUFBSXpyQixLQUFLLENBQUMsMERBQTBELENBQUM7RUFDN0U7RUFBQzFGLHdJQUFBLENBQUFteEIsU0FBQTtJQUFBbHhCLEdBQUE7SUFBQUUsS0FBQSxXQUFBOHpCLGlDQUFBO01BQUEsUUFBQUYsaUNBQUEsR0FBQUEsaUNBQUEsSUFBQXRlLDZJQUFBLGVBQUFDLDJJQUFBLENBdENELFNBQUFDLFFBQUE7UUFBQSxJQUFBbEwsR0FBQTtRQUFBLE9BQUFpTCwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUNReEwsR0FBRyxHQUFHLElBQUlyRSxHQUFHLENBQUMwQiw0REFBc0IsQ0FBQztjQUFBLE9BQUFpTyxRQUFBLENBQUFTLE1BQUEsV0FFcEMyYSxTQUFTLENBQUMrQyxrQ0FBa0MsQ0FBQ3pwQixHQUFHLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXNMLFFBQUEsQ0FBQVcsSUFBQTtVQUFBO1FBQUEsR0FBQWYsT0FBQTtNQUFBLENBQ3pELElBQUFnQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUErekIsbUNBQUExZSxFQUFBO01BQUEsUUFBQXdlLG1DQUFBLEdBQUFBLG1DQUFBLElBQUF2ZSw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrQixTQUFnRG5NLEdBQVE7UUFBQSxJQUFBeUksR0FBQSxFQUFBaWhCLGdCQUFBLEVBQUFDLFdBQUEsRUFBQTllLE9BQUE7UUFBQSxPQUFBSSwySUFBQSxVQUFBbUIsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFkLElBQUEsR0FBQWMsU0FBQSxDQUFBYixJQUFBO1lBQUE7Y0FDaEQvQyxHQUFHLEdBQUd6SSxHQUFHLENBQUNrQyxRQUFRLENBQUMsQ0FBQztjQUFBLEtBRXRCd2tCLFNBQVMsQ0FBQ2tELE1BQU0sQ0FBQ25oQixHQUFHLENBQUM7Z0JBQUE0RCxTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQU4sTUFBQSxXQUNoQjJhLFNBQVMsQ0FBQ2tELE1BQU0sQ0FBQ25oQixHQUFHLENBQUM7WUFBQTtjQUd4QmloQixnQkFBZ0IsR0FBRyxJQUFJRyxzREFBZ0IsQ0FBQzdwQixHQUFHLENBQUM7Y0FDNUMycEIsV0FBVyxHQUFHakQsU0FBUyxDQUFDa0QsTUFBTSxDQUFDbmhCLEdBQUcsQ0FBQyxHQUFHaWhCLGdCQUFnQixDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDO2NBQ2hGamYsT0FBTyxHQUFHNmIsU0FBUyxDQUFDa0QsTUFBTSxDQUFDbmhCLEdBQUcsQ0FBQyxDQUFDK0QsSUFBSSxDQUFDLFlBQU07Z0JBQy9DLElBQU0zQixPQUFPLEdBQUd0UCxVQUFVLENBQUMsWUFBTTtrQkFDL0IsSUFBSW1yQixTQUFTLENBQUNrRCxNQUFNLENBQUNuaEIsR0FBRyxDQUFDLEtBQUtraEIsV0FBVyxFQUFFO29CQUN6QyxPQUFPakQsU0FBUyxDQUFDa0QsTUFBTSxDQUFDbmhCLEdBQUcsQ0FBQztrQkFDOUI7Z0JBQ0YsQ0FBQyxFQUFFNGdCLHNCQUFzQixDQUFDO2NBQzVCLENBQUMsQ0FBQyxDQUFDdmMsS0FBSyxDQUFDLFlBQU07Z0JBQ2IsT0FBTzRaLFNBQVMsQ0FBQ2tELE1BQU0sQ0FBQ25oQixHQUFHLENBQUM7Y0FDOUIsQ0FBQyxDQUFDO2NBQUEsT0FBQTRELFNBQUEsQ0FBQU4sTUFBQSxXQUVLNGQsV0FBVztZQUFBO1lBQUE7Y0FBQSxPQUFBdGQsU0FBQSxDQUFBSixJQUFBO1VBQUE7UUFBQSxHQUFBRSxRQUFBO01BQUEsQ0FDbkIsSUFBQUQsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFxMEIsMkJBQWtDL3BCLEdBQVEsRUFBUTtNQUNoRCxJQUFNeUksR0FBRyxHQUFHekksR0FBRyxDQUFDa0MsUUFBUSxDQUFDLENBQUM7TUFFMUIsSUFBSXdrQixTQUFTLENBQUNrRCxNQUFNLENBQUNuaEIsR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBT2llLFNBQVMsQ0FBQ2tELE1BQU0sQ0FBQ25oQixHQUFHLENBQUM7TUFDOUI7SUFDRjtFQUFDO0VBQUEsT0FBQWllLFNBQUE7QUFBQTtBQUFBNXhCLDJJQUFBLENBckNrQjR4QixTQUFTLFlBQ2EsQ0FBQyxDQUFDO0FBRGY7QUE0QzlCLElBQU03YixPQUFPLEdBQUc2YixTQUFTLENBQUM4QyxnQ0FBZ0MsQ0FBQyxDQUFDLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZENUQ7QUFDQTtBQUNBO0FBQ3VEO0FBQ3JCO0FBQ1Q7QUFFMkI7QUFDVjtBQUVnQjtBQUUxRCxJQUFNUSxjQUFjLEdBQUcsS0FBSztBQUFDLElBRVJILGdCQUFnQiwwQkFBQUksd0JBQUEsRUFBQUMsd0JBQUE7RUFLbkMsU0FBQUwsaUJBQVk3cEIsR0FBUSxFQUFFO0lBQUFuTCwySUFBQSxPQUFBZzFCLGdCQUFBO0lBQUEvMEIsMklBQUEsa0JBSktzSSxvRUFBdUIsQ0FBQyxXQUFXLENBQUM7SUFBQXRJLDJJQUFBO0lBQUFBLDJJQUFBO0lBSzdELElBQUksQ0FBQ2tMLEdBQUcsRUFBRTtNQUNSLE1BQU0sSUFBSS9FLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztJQUMzQztJQUVBLElBQUksQ0FBQ2tnQixlQUFlLEdBQUdqUywrRUFBZ0MsQ0FBQ2xKLEdBQUcsQ0FBQ2tDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDaW9CLElBQUksR0FBR25xQixHQUFHO0VBQ2pCO0VBQUN6Syx3SUFBQSxDQUFBczBCLGdCQUFBO0lBQUFyMEIsR0FBQTtJQUFBRSxLQUFBLFdBQUEwMEIsd0JBQUFyZixFQUFBLEVBQUEyTSxHQUFBO01BQUEsUUFBQXVTLHdCQUFBLEdBQUFBLHdCQUFBLElBQUFqZiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFDLFFBQThCbEwsR0FBUSxFQUFFcXFCLE9BQWU7UUFBQSxJQUFBNWhCLEdBQUEsRUFBQWdFLFFBQUEsRUFBQTZkLFFBQUEsRUFBQUMsU0FBQTtRQUFBLE9BQUF0ZiwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLElBQ2hENmUsT0FBTztnQkFBQS9lLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDSixJQUFJdlEsS0FBSyxDQUFDLDRCQUE0QixDQUFDO1lBQUE7Y0FHekN3TixHQUFHLEdBQUd6SSxHQUFHLENBQUNrQyxRQUFRLENBQUMsQ0FBQztjQUFBb0osUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FDSDRCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNsQ3pELEtBQUssQ0FBQ25ELEdBQUcsRUFBRTtnQkFDVG9ELE1BQU0sRUFBRSxLQUFLO2dCQUNickYsS0FBSyxFQUFFO2NBQ1QsQ0FBQyxDQUFDLEVBQ0YsSUFBSTRHLE9BQU8sQ0FBVyxVQUFDZ0MsQ0FBQyxFQUFFTCxNQUFNO2dCQUFBLE9BQzlCeFQsVUFBVSxDQUFDO2tCQUFBLE9BQU13VCxNQUFNLENBQUMsSUFBSTlULEtBQUsseUJBQUE3QixNQUFBLENBQXlCcVAsR0FBRyxNQUFHLENBQUMsQ0FBQztnQkFBQSxHQUFFNGhCLE9BQU8sQ0FBQztjQUFBLENBQzlFLENBQUMsQ0FDRixDQUFDO1lBQUE7Y0FSSTVkLFFBQVEsR0FBQW5CLFFBQUEsQ0FBQVUsSUFBQTtjQUFBLElBVVRTLFFBQVEsQ0FBQytkLEVBQUU7Z0JBQUFsZixRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ1IsSUFBSXZRLEtBQUssc0JBQUE3QixNQUFBLENBQXNCcVAsR0FBRyxTQUFBclAsTUFBQSxDQUFNcVQsUUFBUSxDQUFDTyxNQUFNLE1BQUcsQ0FBQztZQUFBO2NBQUEsTUFHL0RQLFFBQVEsQ0FBQ1gsSUFBSSxLQUFLLElBQUk7Z0JBQUFSLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDbEIsSUFBSXZRLEtBQUssbUNBQUE3QixNQUFBLENBQW1DcVAsR0FBRyxNQUFHLENBQUM7WUFBQTtjQUFBNkMsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FHcENpQixRQUFRLENBQUNnZSxJQUFJLENBQUMsQ0FBQztZQUFBO2NBQWhDSCxRQUFRLEdBQUFoZixRQUFBLENBQUFVLElBQUE7Y0FDUnVlLFNBQVMsR0FBR0QsUUFBUSxDQUFDenhCLEtBQUssQ0FBQyxHQUFHLENBQUM7Y0FBQSxPQUFBeVMsUUFBQSxDQUFBUyxNQUFBLFdBRTlCd2UsU0FBUyxDQUFDL1gsR0FBRyxDQUFDLFVBQUEwUCxRQUFRO2dCQUFBLE9BQUksSUFBSXdJLDhDQUFRLENBQUN4SSxRQUFRLEVBQUVtSSxPQUFPLENBQUM7Y0FBQSxFQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEvZSxRQUFBLENBQUFXLElBQUE7VUFBQTtRQUFBLEdBQUFmLE9BQUE7TUFBQSxDQUNsRSxJQUFBZ0IsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBbzBCLHdCQUFBO01BQUEsUUFBQUksd0JBQUEsR0FBQUEsd0JBQUEsSUFBQWxmLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQWtCLFNBQUE7UUFBQSxJQUFBcFcsS0FBQTtRQUFBLElBQUFzMEIsT0FBQTtVQUFBNWhCLEdBQUE7VUFBQThoQixTQUFBO1VBQUFJLGNBQUE7VUFBQUMsbUNBQUE7VUFBQTFJLFFBQUE7VUFBQTJJLE1BQUEsR0FBQXJtQixTQUFBO1FBQUEsT0FBQXlHLDJJQUFBLFVBQUFtQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUE4QjZlLE9BQWUsR0FBQVEsTUFBQSxDQUFBeHJCLE1BQUEsUUFBQXdyQixNQUFBLFFBQUE5dkIsU0FBQSxHQUFBOHZCLE1BQUEsTUFBR2IsY0FBYztjQUN0RHZoQixHQUFHLEdBQUd5VCxvRUFBOEIsQ0FBQyxJQUFJLENBQUNpTyxJQUFJLENBQUM7Y0FBQTlkLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQzdCLElBQUksQ0FBQzRlLHVCQUF1QixDQUFDLElBQUl6dUIsR0FBRyxDQUFDOE0sR0FBRyxDQUFDLEVBQUU0aEIsT0FBTyxDQUFDO1lBQUE7Y0FBckVFLFNBQVMsR0FBQWxlLFNBQUEsQ0FBQUwsSUFBQTtjQUNYMmUsY0FBYyxHQUFHLENBQUM7Y0FDaEJDLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQUE7Z0JBQUEsT0FBd0IsSUFBSXhkLE9BQU8sQ0FBQyxVQUFDZ0MsQ0FBQyxFQUFFTCxNQUFNLEVBQUs7a0JBQzFGLElBQUk0YixjQUFjLElBQUlKLFNBQVMsQ0FBQ2xyQixNQUFNLEVBQUU7b0JBQ3RDMFAsTUFBTSxrQkFBQTNWLE1BQUEsQ0FBa0JteEIsU0FBUyxDQUFDbHJCLE1BQU0sd0JBQUFqRyxNQUFBLENBQXFCcVAsR0FBRyw0Q0FBeUMsQ0FBQztrQkFDNUc7Z0JBQ0YsQ0FBQyxDQUFDO2NBQUE7Y0FBQTRELFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQ3FCNEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDa2IsU0FBUyxDQUFDL1gsR0FBRyxDQUFDLFVBQUEwUCxRQUFRO2dCQUFBLE9BQUlBLFFBQVEsQ0FDbkU0SSxJQUFJLENBQUMsQ0FBQyxDQUNOaGUsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7a0JBQ1YxSixLQUFJLENBQUN3SSxPQUFPLENBQUMyRyxJQUFJLENBQUMsK0JBQStCLEVBQUVnZCxRQUFRLEVBQUV6aUIsQ0FBQyxDQUFDO2tCQUUvRGtyQixjQUFjLEVBQUU7a0JBRWhCLE9BQU9DLG1DQUFtQyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxDQUNEcGUsSUFBSSxDQUFDLFVBQUF1ZSxJQUFJLEVBQUk7a0JBQ1osSUFBTTkxQixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7a0JBRXRCYyxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQywwQ0FBMEMsRUFBRTBqQixRQUFRLENBQUNoZ0IsUUFBUSxDQUFDLENBQUMsRUFBRTZvQixJQUFJLENBQUM7a0JBQ3hGaDFCLEtBQUksQ0FBQ29sQixlQUFlLENBQUMvYyxJQUFJLENBQUM7b0JBQ3hCUCxVQUFVLEVBQUVGLHVFQUF5QjtvQkFDckNVLE9BQU8sRUFBRSxDQUFDcEosR0FBRyxHQUFHb0ksc0RBQWdCLElBQUksSUFBSTtvQkFDeEMzSCxLQUFLLEVBQUU7c0JBQUM0SSxNQUFNLEVBQUV5c0IsSUFBSSxJQUFJO29CQUFDLENBQUM7b0JBQzFCemdCLFFBQVEsRUFBRTRYLFFBQVEsQ0FBQ2hnQixRQUFRLENBQUMsQ0FBQztvQkFDN0JxSSxJQUFJLEVBQUU7a0JBQ1IsQ0FBQyxDQUFDO2tCQUVGLE9BQU8yWCxRQUFRO2dCQUNqQixDQUFDLENBQUM7Y0FBQSxFQUFDLENBQUM7WUFBQTtjQXRCQUEsUUFBUSxHQUFBN1YsU0FBQSxDQUFBTCxJQUFBO2NBQUEsT0FBQUssU0FBQSxDQUFBTixNQUFBLFdBd0JQbVcsUUFBUTtZQUFBO1lBQUE7Y0FBQSxPQUFBN1YsU0FBQSxDQUFBSixJQUFBO1VBQUE7UUFBQSxHQUFBRSxRQUFBO01BQUEsQ0FDaEIsSUFBQUQsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7RUFBQSxPQUFBcWxCLGdCQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Rkg7QUFDQTtBQUNBOztBQUVnRDtBQUNUO0FBQ2dCO0FBQ0Q7QUFBQSxJQUVqQzNOLFlBQVk7RUFxQi9CLFNBQUFBLGFBQUEsRUFBc0I7SUFBQXJuQiwySUFBQSxPQUFBcW5CLFlBQUE7SUFDcEIsTUFBTSxJQUFJamhCLEtBQUssQ0FBQyw2REFBNkQsQ0FBQztFQUNoRjtFQUFDMUYsd0lBQUEsQ0FBQTJtQixZQUFBO0lBQUExbUIsR0FBQTtJQUFBQyxHQUFBLEVBcEJELFNBQUFBLElBQUEsRUFBa0M7TUFDaEMsT0FBT3ltQixZQUFZLENBQUM4TyxhQUFhO0lBQ25DO0VBQUM7SUFBQXgxQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBdTFCLGtCQUF5QmpyQixHQUFRLEVBQVU7TUFDekMsSUFBTXlJLEdBQUcsR0FBRyxJQUFJOU0sR0FBRyxDQUFDcUUsR0FBRyxDQUFDa0MsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUNuQyxJQUFNZ3BCLFVBQVUsR0FBR3RnQix1RUFBeUI7TUFDNUMsSUFBTWhKLFVBQVUsR0FBR04sMkZBQXlDO01BRTVEbUgsR0FBRyxDQUFDM04sTUFBTSxPQUFBMUIsTUFBQSxDQUFPLElBQUl3QixlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRXN3QixVQUFVLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRXRwQixVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBQXhJLE1BQUEsQ0FBS3BFLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQUMsQ0FBQ2lOLFFBQVEsQ0FBQyxDQUFDLENBQUU7TUFFaEksSUFBSXVHLEdBQUcsQ0FBQ0UsUUFBUSxLQUFLLEdBQUcsRUFBRTtRQUN4QkYsR0FBRyxDQUFDRSxRQUFRLEdBQUcsa0JBQWtCO01BQ25DO01BRUEsT0FBT0YsR0FBRyxDQUFDdkcsUUFBUSxDQUFDLENBQUM7SUFDdkI7RUFBQztFQUFBLE9BQUFnYSxZQUFBO0FBQUE7QUFBQXBuQiwySUFBQSxDQW5Ca0JvbkIsWUFBWSxtQkFDMEIsSUFBSS9tQixnREFBTyxDQUFTMnpCLDBEQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVm5HO0FBQ0E7QUFDQTtBQUN1RDtBQUVJO0FBV0o7QUFDRDtBQUVBO0FBQ0U7QUFTeEQsSUFBTXFDLFVBQVUsR0FBRyxDQUFDO0FBQUMsSUFnRUFULFFBQVEsMEJBQUFVLEtBQUEsRUFBQUMsVUFBQSxFQUFBQyxRQUFBLEVBQUFyVSxxQkFBQSxFQUFBc1UsYUFBQSxFQUFBQyxpQkFBQSxFQUFBQyxjQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHVDQUFBLEVBQUFDLHFDQUFBLEVBQUFDLGtEQUFBLEVBQUFDLDhDQUFBLEVBQUFDLDJDQUFBO0VBTTNCLFNBQUFyQixTQUFZMXFCLEdBQVcsRUFBRXFxQixPQUFlLEVBQUU7SUFBQXgxQiwySUFBQSxPQUFBNjFCLFFBQUE7SUFBQTUxQiwySUFBQSxrQkFMTnNJLG9FQUF1QixDQUFDLFVBQVUsQ0FBQztJQUFBdEksMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFNckUsSUFBSSxDQUFDcTFCLElBQUksR0FBR25xQixHQUFHO0lBQ2YsSUFBSSxDQUFDZ3NCLFFBQVEsR0FBRzNCLE9BQU87SUFFdkIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDWixNQUFNLElBQUlwdkIsS0FBSywrQkFBK0IsQ0FBQztJQUNqRDtFQUNGO0VBQUMxRix3SUFBQSxDQUFBbTFCLFFBQUE7SUFBQWwxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRCO01BQzFCLE9BQU8sSUFBSSxDQUFDdzJCLGNBQWM7SUFDNUI7RUFBQztJQUFBejJCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3TSxTQUFBLEVBQW1CO01BQ2pCLHVCQUFBOUksTUFBQSxDQUF1QixJQUFJLENBQUMrd0IsSUFBSTtJQUNsQztFQUFDO0lBQUEzMEIsR0FBQTtJQUFBRSxLQUFBLFdBQUFvMUIsS0FBQTtNQUFBLFFBQUFNLEtBQUEsR0FBQUEsS0FBQSxJQUFBcGdCLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQUMsUUFBQTtRQUFBLElBQUFuVixLQUFBO1FBQUEsSUFBQTBTLEdBQUEsRUFBQWtiLEtBQUEsRUFBQWxYLFFBQUEsRUFBQXlmLFFBQUE7UUFBQSxPQUFBamhCLDJJQUFBLFVBQUFJLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQ1EvQyxHQUFHLEdBQUcsSUFBSSxDQUFDMGpCLFlBQVksQ0FBQyxDQUFDO2NBQ3pCeEksS0FBSyxHQUFHM3VCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXFXLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BQ0Q0QixPQUFPLENBQUNpQyxJQUFJLENBQUMsQ0FDbEN6RCxLQUFLLENBQUNuRCxHQUFHLEVBQUU7Z0JBQ1RvRCxNQUFNLEVBQUUsS0FBSztnQkFDYnJGLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUk0RyxPQUFPLENBQVcsVUFBQ2dDLENBQUMsRUFBRUwsTUFBTTtnQkFBQSxPQUM5QnhULFVBQVUsQ0FBQztrQkFBQSxPQUFNd1QsTUFBTSxDQUFDLElBQUk5VCxLQUFLLG9CQUFBN0IsTUFBQSxDQUFvQnFQLEdBQUcsTUFBRyxDQUFDLENBQUM7Z0JBQUEsR0FBRTFTLEtBQUksQ0FBQ2kyQixRQUFRLENBQUM7Y0FBQSxDQUMvRSxDQUFDLENBQ0YsQ0FBQztZQUFBO2NBUkl2ZixRQUFRLEdBQUFuQixRQUFBLENBQUFVLElBQUE7Y0FTUmtnQixRQUFRLEdBQUdsM0IsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBLElBRXRCd1gsUUFBUSxDQUFDK2QsRUFBRTtnQkFBQWxmLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDUixJQUFJdlEsS0FBSyxpQkFBQTdCLE1BQUEsQ0FBaUJxUCxHQUFHLFNBQUFyUCxNQUFBLENBQU1xVCxRQUFRLENBQUNPLE1BQU0sTUFBRyxDQUFDO1lBQUE7Y0FHOUQsSUFBSSxDQUFDaWYsY0FBYyxHQUFHQyxRQUFRLEdBQUd2SSxLQUFLO2NBQUMsT0FBQXJZLFFBQUEsQ0FBQVMsTUFBQSxXQUVoQyxJQUFJLENBQUNrZ0IsY0FBYztZQUFBO1lBQUE7Y0FBQSxPQUFBM2dCLFFBQUEsQ0FBQVcsSUFBQTtVQUFBO1FBQUEsR0FBQWYsT0FBQTtNQUFBLENBQzNCLElBQUFnQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUE0akIsVUFBQXZPLEVBQUEsRUFBQTJNLEdBQUEsRUFBQUUsR0FBQTtNQUFBLFFBQUF5VCxVQUFBLEdBQUFBLFVBQUEsSUFBQXJnQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFrQixTQUFnQnJOLEtBQXVCLEVBQUVzdEIsdUJBQWtELEVBQUVwSyxZQUFvQjtRQUFBLElBQUFqckIsTUFBQTtRQUFBLElBQUFnUyxPQUFBLEVBQUFOLEdBQUEsRUFBQTJDLFFBQUEsRUFBQWloQixhQUFBLEVBQUFDLGFBQUEsRUFBQUMsZ0JBQUEsRUFBQTVJLEtBQUEsRUFBQTZJLFlBQUEsRUFBQW5DLE9BQUEsRUFBQXJkLE1BQUEsRUFBQWtmLFFBQUEsRUFBQU8saUJBQUE7UUFBQSxPQUFBeGhCLDJJQUFBLFVBQUFtQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUN6R3pDLE9BQU8sR0FBR25LLHdFQUF5QixDQUFDRSxLQUFLLENBQUMsQ0FBQ2lLLE9BQU87Y0FBQSxJQUVuREEsT0FBTztnQkFBQXNELFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQ1YsSUFBSSxDQUFDak4sT0FBTyxDQUFDUyxLQUFLLENBQUMsNEJBQTRCLEVBQUVGLEtBQUssQ0FBQztjQUFDLE9BQUF1TixTQUFBLENBQUFOLE1BQUEsV0FFakQ7Z0JBQUNpQixNQUFNLEVBQUU7Y0FBYyxDQUFDO1lBQUE7Y0FHM0J2RSxHQUFHLEdBQUcsSUFBSSxDQUFDaWtCLFFBQVEsQ0FBQyxDQUFDM2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzdHLFFBQVEsQ0FBQyxDQUFDO2NBQ2hFa0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBQ3pCNGdCLGFBQWEsR0FBR3poQix1RUFBeUI7Y0FFL0MsSUFBSW9YLFlBQVksS0FBSyxDQUFDLElBQUlvSyx1QkFBdUIsRUFBRTtnQkFDM0NFLGFBQXlDLEdBQUc7a0JBQ2hEbkIsVUFBVSxFQUFWQSxVQUFVO2tCQUNWa0IsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUU3dEIsS0FBSztrQkFDbEJrakIsWUFBWSxFQUFaQSxZQUFZO2tCQUNaNEssaUJBQWlCLEVBQUUsSUFBSSxDQUFDWCxjQUFjO2tCQUN0Q2xVLG9CQUFvQixFQUFFO29CQUNwQm9ULFVBQVUsRUFBVkEsVUFBVTtvQkFDVjBCLGtCQUFrQixFQUFFO3NCQUNsQi92QixJQUFJLEVBQUVzdkIsdUJBQXVCLENBQUN0dkIsSUFBSTtzQkFDbEMrVixHQUFHLEVBQUV1Wix1QkFBdUIsQ0FBQ3ZaO29CQUMvQjtrQkFDRixDQUFDO2tCQUNEaWEsdUJBQXVCLEVBQUU7b0JBQUMzQixVQUFVLEVBQVZBO2tCQUFVO2dCQUN0QyxDQUFDO2dCQUVEL2YsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDb21CLGFBQWEsQ0FBQyxDQUFDO2NBQzVELENBQUMsTUFBTTtnQkFDQ0MsZ0JBQStDLEdBQUc7a0JBQ3REcEIsVUFBVSxFQUFWQSxVQUFVO2tCQUNWa0IsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUU3dEIsS0FBSztrQkFDbEJrakIsWUFBWSxFQUFaQSxZQUFZO2tCQUNaNEssaUJBQWlCLEVBQUUsSUFBSSxDQUFDWCxjQUFjO2tCQUN0Q2Msc0JBQXNCLEVBQUU7b0JBQUM1QixVQUFVLEVBQVZBO2tCQUFVO2dCQUNyQyxDQUFDO2dCQUVEL2YsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDcW1CLGdCQUFnQixDQUFDLENBQUM7Y0FDL0Q7Y0FFTTVJLEtBQUssR0FBRzN1QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFvWCxTQUFBLENBQUFkLElBQUE7Y0FJbEI4ZSxPQUFPLEdBQUcsSUFBSTtjQUFBaGUsU0FBQSxDQUFBYixJQUFBO2NBQUEsT0FFRzRCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNoQ3pELEtBQUssQ0FBQ25ELEdBQUcsRUFBRTtnQkFDVG9ELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVWO2NBQ1IsQ0FBQyxDQUFDLEVBQ0YsSUFBSWdDLE9BQU8sQ0FBVyxVQUFBMEIsT0FBTztnQkFBQSxPQUMzQnViLE9BQU8sR0FBR3B6QixNQUFNLENBQUNzRSxVQUFVLENBQUMsWUFBTTtrQkFDaEN4RSxNQUFJLENBQUN3SCxPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJL0QsS0FBSyx5QkFBQTdCLE1BQUEsQ0FBeUJxUCxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUNwRnFHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRWpXLE1BQUksQ0FBQ2kxQixRQUFRLENBQUM7Y0FBQSxDQUNuQixDQUFDLENBQ0YsQ0FBQyxDQUNDbkYsT0FBTyxDQUFDLFlBQU07Z0JBQ2IsSUFBSXdELE9BQU8sRUFBRTtrQkFDWC9XLFlBQVksQ0FBQytXLE9BQU8sQ0FBQztnQkFDdkI7Y0FDRixDQUFDLENBQUM7WUFBQTtjQWhCSm1DLFlBQVksR0FBQW5nQixTQUFBLENBQUFMLElBQUE7Y0FBQUssU0FBQSxDQUFBYixJQUFBO2NBQUE7WUFBQTtjQUFBYSxTQUFBLENBQUFkLElBQUE7Y0FBQWMsU0FBQSxDQUFBd0UsRUFBQSxHQUFBeEUsU0FBQTtjQWtCWixJQUFJLENBQUM5TixPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBQXFOLFNBQUEsQ0FBQXdFLEVBQUcsQ0FBQztjQUFDLE9BQUF4RSxTQUFBLENBQUFOLE1BQUEsV0FFdEM7Z0JBQUNpQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXVCLEdBQUcsSUFBSSxDQUFDZ2dCLDhCQUE4QixDQUFDUixZQUFZLENBQUM7Y0FBQSxNQUU3RXhmLE1BQU0sS0FBSyxJQUFJO2dCQUFBWCxTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQU4sTUFBQSxXQUNWO2dCQUFDaUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYa2YsUUFBUSxHQUFHbDNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQW9YLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQ0ssSUFBSSxDQUFDeWhCLHNDQUFzQyxDQUFDbGtCLE9BQU8sRUFBRXlqQixZQUFZLENBQUM7WUFBQTtjQUE1RkMsaUJBQWlCLEdBQUFwZ0IsU0FBQSxDQUFBTCxJQUFBO2NBRXZCLElBQUksQ0FBQ3pOLE9BQU8sQ0FBQ29HLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRThuQixpQkFBaUIsRUFBRVAsUUFBUSxHQUFHdkksS0FBSyxDQUFDO2NBQUMsT0FBQXRYLFNBQUEsQ0FBQU4sTUFBQSxXQUUzRjBnQixpQkFBaUI7WUFBQTtZQUFBO2NBQUEsT0FBQXBnQixTQUFBLENBQUFKLElBQUE7VUFBQTtRQUFBLEdBQUFFLFFBQUE7TUFBQSxDQUN6QixJQUFBRCxLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUF3M0IsUUFBQWxWLEdBQUEsRUFBQW1WLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO01BQUEsUUFBQS9CLFFBQUEsR0FBQUEsUUFBQSxJQUFBdGdCLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQWdGLFNBQWNwVyxJQUFZLEVBQUVpRixLQUF1QixFQUFFc3RCLHVCQUFrRCxFQUFFcEssWUFBb0I7UUFBQSxJQUFBdkosTUFBQTtRQUFBLElBQUExUCxPQUFBLEVBQUFOLEdBQUEsRUFBQTJDLFFBQUEsRUFBQWloQixhQUFBLEVBQUFDLGFBQUEsRUFBQUMsZ0JBQUEsRUFBQTVJLEtBQUEsRUFBQTZJLFlBQUEsRUFBQW5DLE9BQUEsRUFBQXJkLE1BQUEsRUFBQWtmLFFBQUEsRUFBQU8saUJBQUE7UUFBQSxPQUFBeGhCLDJJQUFBLFVBQUFvRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQTlFLElBQUE7WUFBQTtjQUNySHpDLE9BQU8sR0FBR25LLHdFQUF5QixDQUFDRSxLQUFLLENBQUMsQ0FBQ2lLLE9BQU87Y0FBQSxJQUVuREEsT0FBTztnQkFBQXVILFNBQUEsQ0FBQTlFLElBQUE7Z0JBQUE7Y0FBQTtjQUNWLElBQUksQ0FBQ2pOLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDRCQUE0QixFQUFFRixLQUFLLENBQUM7Y0FBQyxPQUFBd1IsU0FBQSxDQUFBdkUsTUFBQSxXQUVqRDtnQkFBQ2lCLE1BQU0sRUFBRTtjQUFjLENBQUM7WUFBQTtjQUczQnZFLEdBQUcsR0FBRyxJQUFJLENBQUNpa0IsUUFBUSxDQUFDLENBQUMzakIsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDN0csUUFBUSxDQUFDLENBQUM7Y0FDOURrSixRQUFRLEdBQUcsSUFBSUssUUFBUSxDQUFDLENBQUM7Y0FDekI0Z0IsYUFBYSxHQUFHemhCLHVFQUF5QjtjQUUvQyxJQUFJb1gsWUFBWSxLQUFLLENBQUMsSUFBSW9LLHVCQUF1QixFQUFFO2dCQUMzQ0UsYUFBdUMsR0FBRztrQkFDOUNuQixVQUFVLEVBQVZBLFVBQVU7a0JBQ1ZrQixhQUFhLEVBQWJBLGFBQWE7a0JBQ2JNLFdBQVcsRUFBRTd0QixLQUFLO2tCQUNsQmtqQixZQUFZLEVBQVpBLFlBQVk7a0JBQ1o0SyxpQkFBaUIsRUFBRSxJQUFJLENBQUNYLGNBQWM7a0JBQ3RDcHlCLElBQUksRUFBSkEsSUFBSTtrQkFDSmtlLG9CQUFvQixFQUFFO29CQUNwQm9ULFVBQVUsRUFBVkEsVUFBVTtvQkFDVjBCLGtCQUFrQixFQUFFO3NCQUNsQi92QixJQUFJLEVBQUVzdkIsdUJBQXVCLENBQUN0dkIsSUFBSTtzQkFDbEMrVixHQUFHLEVBQUV1Wix1QkFBdUIsQ0FBQ3ZaO29CQUMvQjtrQkFDRixDQUFDO2tCQUNEaWEsdUJBQXVCLEVBQUU7b0JBQ3ZCcnZCLFFBQVEsRUFBRSxFQUFFO29CQUNaMHRCLFVBQVUsRUFBVkE7a0JBQ0Y7Z0JBQ0YsQ0FBQztnQkFFRC9mLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRW5NLElBQUksQ0FBQzJHLFNBQVMsQ0FBQ29tQixhQUFhLENBQUMsQ0FBQztjQUM1RCxDQUFDLE1BQU07Z0JBQ0NDLGdCQUE2QyxHQUFHO2tCQUNwRHBCLFVBQVUsRUFBVkEsVUFBVTtrQkFDVmtCLGFBQWEsRUFBYkEsYUFBYTtrQkFDYk0sV0FBVyxFQUFFN3RCLEtBQUs7a0JBQ2xCa2pCLFlBQVksRUFBWkEsWUFBWTtrQkFDWjRLLGlCQUFpQixFQUFFLElBQUksQ0FBQ1gsY0FBYztrQkFDdENweUIsSUFBSSxFQUFKQSxJQUFJO2tCQUNKa3pCLHNCQUFzQixFQUFFO29CQUN0QnR2QixRQUFRLEVBQUUsRUFBRTtvQkFDWjB0QixVQUFVLEVBQVZBO2tCQUNGO2dCQUNGLENBQUM7Z0JBRUQvZixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUNxbUIsZ0JBQWdCLENBQUMsQ0FBQztjQUMvRDtjQUVNNUksS0FBSyxHQUFHM3VCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXFiLFNBQUEsQ0FBQS9FLElBQUE7Y0FJbEI4ZSxPQUFPLEdBQUcsSUFBSTtjQUFBL1osU0FBQSxDQUFBOUUsSUFBQTtjQUFBLE9BRUc0QixPQUFPLENBQUNpQyxJQUFJLENBQUMsQ0FDaEN6RCxLQUFLLENBQUNuRCxHQUFHLEVBQUU7Z0JBQ1RvRCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVjtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlnQyxPQUFPLENBQVcsVUFBQTBCLE9BQU87Z0JBQUEsT0FDM0J1YixPQUFPLEdBQUdwekIsTUFBTSxDQUFDc0UsVUFBVSxDQUFDLFlBQU07a0JBQ2hDa2QsTUFBSSxDQUFDbGEsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSS9ELEtBQUssdUJBQUE3QixNQUFBLENBQXVCcVAsR0FBRyxNQUFHLENBQUMsQ0FBQztrQkFDaEZxRyxPQUFPLENBQUM7b0JBQUM5QixNQUFNLEVBQUU7a0JBQUcsQ0FBYSxDQUFDO2dCQUNwQyxDQUFDLEVBQUV5TCxNQUFJLENBQUN1VCxRQUFRLENBQUM7Y0FBQSxDQUNuQixDQUFDLENBQ0YsQ0FBQyxDQUNDbkYsT0FBTyxDQUFDLFlBQU07Z0JBQ2IsSUFBSXdELE9BQU8sRUFBRTtrQkFDWC9XLFlBQVksQ0FBQytXLE9BQU8sQ0FBQztnQkFDdkI7Y0FDRixDQUFDLENBQUM7WUFBQTtjQWhCSm1DLFlBQVksR0FBQWxjLFNBQUEsQ0FBQXRFLElBQUE7Y0FBQXNFLFNBQUEsQ0FBQTlFLElBQUE7Y0FBQTtZQUFBO2NBQUE4RSxTQUFBLENBQUEvRSxJQUFBO2NBQUErRSxTQUFBLENBQUFPLEVBQUEsR0FBQVAsU0FBQTtjQWtCWixJQUFJLENBQUMvUixPQUFPLENBQUNTLEtBQUssQ0FBQyxtQkFBbUIsRUFBQXNSLFNBQUEsQ0FBQU8sRUFBRyxDQUFDO2NBQUMsT0FBQVAsU0FBQSxDQUFBdkUsTUFBQSxXQUVwQztnQkFBQ2lCLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBcUIsR0FBRyxJQUFJLENBQUNzZ0IsNEJBQTRCLENBQUNkLFlBQVksQ0FBQztjQUFBLE1BRXpFeGYsTUFBTSxLQUFLLElBQUk7Z0JBQUFzRCxTQUFBLENBQUE5RSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBOEUsU0FBQSxDQUFBdkUsTUFBQSxXQUNWO2dCQUFDaUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYa2YsUUFBUSxHQUFHbDNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXFiLFNBQUEsQ0FBQTlFLElBQUE7Y0FBQSxPQUNLLElBQUksQ0FBQytoQixvQ0FBb0MsQ0FBQ3hrQixPQUFPLEVBQUV5akIsWUFBWSxDQUFDO1lBQUE7Y0FBMUZDLGlCQUFpQixHQUFBbmMsU0FBQSxDQUFBdEUsSUFBQTtjQUV2QixJQUFJLENBQUN6TixPQUFPLENBQUNvRyxLQUFLLENBQUMsc0NBQXNDLEVBQUU4bkIsaUJBQWlCLEVBQUVQLFFBQVEsR0FBR3ZJLEtBQUssQ0FBQztjQUFDLE9BQUFyVCxTQUFBLENBQUF2RSxNQUFBLFdBRXpGMGdCLGlCQUFpQjtZQUFBO1lBQUE7Y0FBQSxPQUFBbmMsU0FBQSxDQUFBckUsSUFBQTtVQUFBO1FBQUEsR0FBQWdFLFFBQUE7TUFBQSxDQUN6QixJQUFBL0QsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBcWlCLHFCQUFBeVYsR0FBQSxFQUFBQyxHQUFBO01BQUEsUUFBQXhXLHFCQUFBLEdBQUFBLHFCQUFBLElBQUFqTSw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFnTixTQUEyQm1LLE1BQWUsRUFBRXlLLGtCQUE2QztRQUFBLElBQUFsVSxNQUFBO1FBQUEsSUFBQWxRLEdBQUEsRUFBQTJDLFFBQUEsRUFBQVUsSUFBQSxFQUFBNlgsS0FBQSxFQUFBNkksWUFBQSxFQUFBbkMsT0FBQSxFQUFBcmQsTUFBQSxFQUFBa2YsUUFBQSxFQUFBd0IsNEJBQUE7UUFBQSxPQUFBemlCLDJJQUFBLFVBQUFtTixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTlNLElBQUEsR0FBQThNLFNBQUEsQ0FBQTdNLElBQUE7WUFBQTtjQUNqRi9DLEdBQUcsR0FBRyxJQUFJLENBQUNpa0IsUUFBUSxDQUFDLENBQUN0SyxNQUFNLENBQUNyWixPQUFPLEVBQUUsUUFBUSxFQUFFcVosTUFBTSxDQUFDM2tCLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQ3lFLFFBQVEsQ0FBQyxDQUFDO2NBQ3BHa0osUUFBUSxHQUFHLElBQUlLLFFBQVEsQ0FBQyxDQUFDO2NBQ3pCSyxJQUFrQyxHQUFHO2dCQUN6Q3FmLFVBQVUsRUFBVkEsVUFBVTtnQkFDVndDLFlBQVksRUFBRXZMLE1BQU0sQ0FBQ3VMLFlBQVk7Z0JBQ2pDZCxrQkFBa0IsRUFBRTtrQkFDbEIvdkIsSUFBSSxFQUFFK3ZCLGtCQUFrQixDQUFDL3ZCLElBQUk7a0JBQzdCK1YsR0FBRyxFQUFFZ2Esa0JBQWtCLENBQUNoYTtnQkFDMUI7Y0FDRixDQUFDO2NBRUR6SCxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM0RixJQUFJLENBQUMsQ0FBQztjQUUzQzZYLEtBQUssR0FBRzN1QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFvakIsU0FBQSxDQUFBOU0sSUFBQTtjQUlsQjhlLE9BQU8sR0FBRyxJQUFJO2NBQUFoUyxTQUFBLENBQUE3TSxJQUFBO2NBQUEsT0FFRzRCLE9BQU8sQ0FBQ2lDLElBQUksQ0FBQyxDQUNoQ3pELEtBQUssQ0FBQ25ELEdBQUcsRUFBRTtnQkFDVG9ELE1BQU0sRUFBRSxNQUFNO2dCQUNkQyxJQUFJLEVBQUVWO2NBQ1IsQ0FBQyxDQUFDLEVBQ0YsSUFBSWdDLE9BQU8sQ0FBVyxVQUFBMEIsT0FBTztnQkFBQSxPQUMzQnViLE9BQU8sR0FBR3B6QixNQUFNLENBQUNzRSxVQUFVLENBQUMsWUFBTTtrQkFDaENvZCxNQUFJLENBQUNwYSxPQUFPLENBQUNTLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJL0QsS0FBSyxzQ0FBQTdCLE1BQUEsQ0FBc0NxUCxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUM5R3FHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRTJMLE1BQUksQ0FBQ3FULFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NuRixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0QsT0FBTyxFQUFFO2tCQUNYL1csWUFBWSxDQUFDK1csT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBaEJKbUMsWUFBWSxHQUFBblUsU0FBQSxDQUFBck0sSUFBQTtjQUFBcU0sU0FBQSxDQUFBN00sSUFBQTtjQUFBO1lBQUE7Y0FBQTZNLFNBQUEsQ0FBQTlNLElBQUE7Y0FBQThNLFNBQUEsQ0FBQXhILEVBQUEsR0FBQXdILFNBQUE7Y0FrQlosSUFBSSxDQUFDOVosT0FBTyxDQUFDUyxLQUFLLENBQUMsa0NBQWtDLEVBQUFxWixTQUFBLENBQUF4SCxFQUFHLENBQUM7Y0FBQyxPQUFBd0gsU0FBQSxDQUFBdE0sTUFBQSxXQUVuRDtnQkFBQ2lCLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBa0MsR0FBRyxJQUFJLENBQUM0Z0IseUNBQXlDLENBQUNwQixZQUFZLENBQUM7Y0FBQSxNQUVuR3hmLE1BQU0sS0FBSyxJQUFJO2dCQUFBcUwsU0FBQSxDQUFBN00sSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQTZNLFNBQUEsQ0FBQXRNLE1BQUEsV0FDVjtnQkFBQ2lCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7Y0FHWGtmLFFBQVEsR0FBR2wzQixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFvakIsU0FBQSxDQUFBN00sSUFBQTtjQUFBLE9BQ2dCLElBQUksQ0FBQ3FpQixpREFBaUQsQ0FBQ3JCLFlBQVksQ0FBQztZQUFBO2NBQXpHa0IsNEJBQTRCLEdBQUFyVixTQUFBLENBQUFyTSxJQUFBO2NBRWxDLElBQUksQ0FBQ3pOLE9BQU8sQ0FBQ29HLEtBQUssQ0FBQyxxREFBcUQsRUFBRStvQiw0QkFBNEIsRUFBRXhCLFFBQVEsR0FBR3ZJLEtBQUssQ0FBQztjQUFDLE9BQUF0TCxTQUFBLENBQUF0TSxNQUFBLFdBRW5IMmhCLDRCQUE0QjtZQUFBO1lBQUE7Y0FBQSxPQUFBclYsU0FBQSxDQUFBcE0sSUFBQTtVQUFBO1FBQUEsR0FBQWdNLFFBQUE7TUFBQSxDQUNwQyxJQUFBL0wsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBK3RCLGFBQUFxSyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxRQUFBM0MsYUFBQSxHQUFBQSxhQUFBLElBQUF2Z0IsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBa2EsU0FDRS9DLE1BQWUsRUFDZmtCLHFCQUE2QixFQUM3QmdCLHNCQUFxQyxFQUNyQzhFLFlBQTBCLEVBQzFCSCxXQUF3QjtRQUFBLElBQUE3RCxNQUFBO1FBQUEsSUFBQTNjLEdBQUEsRUFBQTJDLFFBQUEsRUFBQVUsSUFBQSxFQUFBNlgsS0FBQSxFQUFBNkksWUFBQSxFQUFBbkMsT0FBQSxFQUFBcmQsTUFBQSxFQUFBa2YsUUFBQTtRQUFBLE9BQUFqaEIsMklBQUEsVUFBQXFiLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBaGIsSUFBQSxHQUFBZ2IsU0FBQSxDQUFBL2EsSUFBQTtZQUFBO2NBRWxCL0MsR0FBRyxHQUFHLElBQUksQ0FBQ2lrQixRQUFRLENBQUMsQ0FBQ3RLLE1BQU0sQ0FBQ3JaLE9BQU8sRUFBRSxRQUFRLEVBQUVxWixNQUFNLENBQUMza0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUMsQ0FBQztjQUN0RmtKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUN6QkssSUFBaUMsR0FBRztnQkFDeENxZixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Z3QyxZQUFZLEVBQUV2TCxNQUFNLENBQUN1TCxZQUFZO2dCQUNqQ3JLLHFCQUFxQixFQUFyQkEscUJBQXFCO2dCQUNyQmdCLHNCQUFzQixFQUF0QkEsc0JBQXNCO2dCQUN0QjhFLFlBQVksRUFBRUYsZ0dBQXlELENBQUNFLFlBQVksQ0FBQztnQkFDckZILFdBQVcsRUFBRUYsNkZBQXNELENBQUNFLFdBQVc7Y0FDakYsQ0FBQztjQUVEN2QsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDNEYsSUFBSSxDQUFDLENBQUM7Y0FFM0M2WCxLQUFLLEdBQUczdUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBc3hCLFNBQUEsQ0FBQWhiLElBQUE7Y0FJbEI4ZSxPQUFPLEdBQUcsSUFBSTtjQUFBOUQsU0FBQSxDQUFBL2EsSUFBQTtjQUFBLE9BRUc0QixPQUFPLENBQUNpQyxJQUFJLENBQUMsQ0FDaEN6RCxLQUFLLENBQUNuRCxHQUFHLEVBQUU7Z0JBQ1RvRCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVjtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlnQyxPQUFPLENBQVcsVUFBQTBCLE9BQU87Z0JBQUEsT0FDM0J1YixPQUFPLEdBQUdwekIsTUFBTSxDQUFDc0UsVUFBVSxDQUFDLFlBQU07a0JBQ2hDNnBCLE1BQUksQ0FBQzdtQixPQUFPLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJL0QsS0FBSyxpQ0FBQTdCLE1BQUEsQ0FBaUNxUCxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUMxR3FHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRW9ZLE1BQUksQ0FBQzRHLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NuRixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0QsT0FBTyxFQUFFO2tCQUNYL1csWUFBWSxDQUFDK1csT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBaEJKbUMsWUFBWSxHQUFBakcsU0FBQSxDQUFBdmEsSUFBQTtjQUFBdWEsU0FBQSxDQUFBL2EsSUFBQTtjQUFBO1lBQUE7Y0FBQSthLFNBQUEsQ0FBQWhiLElBQUE7Y0FBQWdiLFNBQUEsQ0FBQTFWLEVBQUEsR0FBQTBWLFNBQUE7Y0FrQlosSUFBSSxDQUFDaG9CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFBdW5CLFNBQUEsQ0FBQTFWLEVBQUcsQ0FBQztjQUFDLE9BQUEwVixTQUFBLENBQUF4YSxNQUFBLFdBRXBEO2dCQUFDaUIsTUFBTSxFQUFFO2NBQVEsQ0FBQztZQUFBO2NBR3JCQSxNQUF3QyxHQUFHLElBQUksQ0FBQ21oQiwrQ0FBK0MsQ0FBQzNCLFlBQVksQ0FBQztjQUM3R04sUUFBUSxHQUFHbDNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FFM0IsSUFBSSxDQUFDc0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELEVBQUV3TyxNQUFNLEVBQUVrZixRQUFRLEdBQUd2SSxLQUFLLENBQUM7Y0FBQyxPQUFBNEMsU0FBQSxDQUFBeGEsTUFBQSxXQUV2RjtnQkFBQ2lCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF1WixTQUFBLENBQUF0YSxJQUFBO1VBQUE7UUFBQSxHQUFBa1osUUFBQTtNQUFBLENBQ2hCLElBQUFqWixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUEwNEIsaUJBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO01BQUEsUUFBQS9DLGlCQUFBLEdBQUFBLGlCQUFBLElBQUF4Z0IsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBK2IsU0FBdUI1RSxNQUFlLEVBQUVvTSxVQUE2QixFQUFFQyxrQkFBMkI7UUFBQSxJQUFBL0csTUFBQTtRQUFBLElBQUEvVyxPQUFBO1VBQUFsSSxHQUFBO1VBQUEyQyxRQUFBO1VBQUFVLElBQUE7VUFBQTZYLEtBQUE7VUFBQTZJLFlBQUE7VUFBQW5DLE9BQUE7VUFBQXJkLE1BQUE7VUFBQWtmLFFBQUE7VUFBQXdDLHdCQUFBO1VBQUFDLE1BQUEsR0FBQW5xQixTQUFBO1FBQUEsT0FBQXlHLDJJQUFBLFVBQUFnYyxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTNiLElBQUEsR0FBQTJiLFNBQUEsQ0FBQTFiLElBQUE7WUFBQTtjQUFFbUYsT0FBaUIsR0FBQWdlLE1BQUEsQ0FBQXR2QixNQUFBLFFBQUFzdkIsTUFBQSxRQUFBNXpCLFNBQUEsR0FBQTR6QixNQUFBLE1BQUcsRUFBRTtjQUNsSGxtQixHQUFHLEdBQUcsSUFBSSxDQUFDaWtCLFFBQVEsQ0FBQyxDQUFDdEssTUFBTSxDQUFDclosT0FBTyxFQUFFLFFBQVEsRUFBRXFaLE1BQU0sQ0FBQzNrQixRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUMsQ0FBQztjQUNoR2tKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUN6QkssSUFBOEIsR0FBRztnQkFDckNxZixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Z3QyxZQUFZLEVBQUV2TCxNQUFNLENBQUN1TCxZQUFZO2dCQUNqQ2EsVUFBVSxFQUFWQSxVQUFVO2dCQUNWQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtnQkFDbEI5ZCxPQUFPLEVBQVBBO2NBQ0YsQ0FBQztjQUVEdkYsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFbk0sSUFBSSxDQUFDMkcsU0FBUyxDQUFDNEYsSUFBSSxDQUFDLENBQUM7Y0FFM0M2WCxLQUFLLEdBQUczdUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBaXlCLFNBQUEsQ0FBQTNiLElBQUE7Y0FJbEI4ZSxPQUFPLEdBQUcsSUFBSTtjQUFBbkQsU0FBQSxDQUFBMWIsSUFBQTtjQUFBLE9BRUc0QixPQUFPLENBQUNpQyxJQUFJLENBQUMsQ0FDaEN6RCxLQUFLLENBQUNuRCxHQUFHLEVBQUU7Z0JBQ1RvRCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVjtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUlnQyxPQUFPLENBQVcsVUFBQTBCLE9BQU87Z0JBQUEsT0FDM0J1YixPQUFPLEdBQUdwekIsTUFBTSxDQUFDc0UsVUFBVSxDQUFDLFlBQU07a0JBQ2hDbXNCLE1BQUksQ0FBQ25wQixPQUFPLENBQUNTLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxJQUFJL0QsS0FBSyxrQ0FBQTdCLE1BQUEsQ0FBa0NxUCxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUN0R3FHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRTBhLE1BQUksQ0FBQ3NFLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NuRixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0QsT0FBTyxFQUFFO2tCQUNYL1csWUFBWSxDQUFDK1csT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBaEJKbUMsWUFBWSxHQUFBdEYsU0FBQSxDQUFBbGIsSUFBQTtjQUFBa2IsU0FBQSxDQUFBMWIsSUFBQTtjQUFBO1lBQUE7Y0FBQTBiLFNBQUEsQ0FBQTNiLElBQUE7Y0FBQTJiLFNBQUEsQ0FBQXJXLEVBQUEsR0FBQXFXLFNBQUE7Y0FrQlosSUFBSSxDQUFDM29CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDhCQUE4QixFQUFBa29CLFNBQUEsQ0FBQXJXLEVBQUcsQ0FBQztjQUFDLE9BQUFxVyxTQUFBLENBQUFuYixNQUFBLFdBRS9DO2dCQUFDaUIsTUFBTSxFQUFFO2NBQVEsQ0FBQztZQUFBO2NBR3JCQSxNQUE4QixHQUFHLElBQUksQ0FBQzRoQixxQ0FBcUMsQ0FBQ3BDLFlBQVksQ0FBQztjQUFBLE1BRTNGeGYsTUFBTSxLQUFLLElBQUk7Z0JBQUFrYSxTQUFBLENBQUExYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBMGIsU0FBQSxDQUFBbmIsTUFBQSxXQUNWO2dCQUFDaUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYa2YsUUFBUSxHQUFHbDNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQWl5QixTQUFBLENBQUExYixJQUFBO2NBQUEsT0FDWSxJQUFJLENBQUNxakIsNkNBQTZDLENBQUNyQyxZQUFZLENBQUM7WUFBQTtjQUFqR2tDLHdCQUF3QixHQUFBeEgsU0FBQSxDQUFBbGIsSUFBQTtjQUU5QixJQUFJLENBQUN6TixPQUFPLENBQUNDLElBQUksQ0FBQyxpREFBaUQsRUFBRWt3Qix3QkFBd0IsRUFBRXhDLFFBQVEsR0FBR3ZJLEtBQUssQ0FBQztjQUFDLE9BQUF1RCxTQUFBLENBQUFuYixNQUFBLFdBRTFHMmlCLHdCQUF3QjtZQUFBO1lBQUE7Y0FBQSxPQUFBeEgsU0FBQSxDQUFBamIsSUFBQTtVQUFBO1FBQUEsR0FBQSthLFFBQUE7TUFBQSxDQUNoQyxJQUFBOWEsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBaXlCLGNBQUFtSCxJQUFBLEVBQUFDLElBQUE7TUFBQSxRQUFBdEQsY0FBQSxHQUFBQSxjQUFBLElBQUF6Z0IsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBbWMsU0FBb0JoRixNQUFlLEVBQUV0VSxNQUFjO1FBQUEsSUFBQWlhLE1BQUE7UUFBQSxJQUFBdGYsR0FBQSxFQUFBMkMsUUFBQSxFQUFBVSxJQUFBLEVBQUE2WCxLQUFBLEVBQUE2SSxZQUFBLEVBQUFuQyxPQUFBLEVBQUFyZCxNQUFBLEVBQUFrZixRQUFBLEVBQUE4QyxxQkFBQTtRQUFBLE9BQUEvakIsMklBQUEsVUFBQW9jLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL2IsSUFBQSxHQUFBK2IsU0FBQSxDQUFBOWIsSUFBQTtZQUFBO2NBQzNDL0MsR0FBRyxHQUFHLElBQUksQ0FBQ2lrQixRQUFRLENBQUMsQ0FBQ3RLLE1BQU0sQ0FBQ3JaLE9BQU8sRUFBRSxRQUFRLEVBQUVxWixNQUFNLENBQUMza0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN5RSxRQUFRLENBQUMsQ0FBQztjQUN0RmtKLFFBQVEsR0FBRyxJQUFJSyxRQUFRLENBQUMsQ0FBQztjQUN6QkssSUFBMkIsR0FBRztnQkFDbENxZixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Z3QyxZQUFZLEVBQUV2TCxNQUFNLENBQUN1TCxZQUFZO2dCQUNqQzdmLE1BQU0sRUFBTkEsTUFBTTtnQkFDTjZDLE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FFRHZGLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRW5NLElBQUksQ0FBQzJHLFNBQVMsQ0FBQzRGLElBQUksQ0FBQyxDQUFDO2NBRTNDNlgsS0FBSyxHQUFHM3VCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXF5QixTQUFBLENBQUEvYixJQUFBO2NBSWxCOGUsT0FBTyxHQUFHLElBQUk7Y0FBQS9DLFNBQUEsQ0FBQTliLElBQUE7Y0FBQSxPQUVHNEIsT0FBTyxDQUFDaUMsSUFBSSxDQUFDLENBQ2hDekQsS0FBSyxDQUFDbkQsR0FBRyxFQUFFO2dCQUNUb0QsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVYsUUFBUTtnQkFDZDVFLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUk0RyxPQUFPLENBQVcsVUFBQTBCLE9BQU87Z0JBQUEsT0FDM0J1YixPQUFPLEdBQUdwekIsTUFBTSxDQUFDc0UsVUFBVSxDQUFDLFlBQU07a0JBQ2hDd3NCLE1BQUksQ0FBQ3hwQixPQUFPLENBQUNTLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxJQUFJL0QsS0FBSyw2QkFBQTdCLE1BQUEsQ0FBNkJxUCxHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUN4RnFHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRSthLE1BQUksQ0FBQ2lFLFFBQVEsQ0FBQztjQUFBLENBQ25CLENBQUMsQ0FDRixDQUFDLENBQ0NuRixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0QsT0FBTyxFQUFFO2tCQUNYL1csWUFBWSxDQUFDK1csT0FBTyxDQUFDO2dCQUN2QjtjQUNGLENBQUMsQ0FBQztZQUFBO2NBakJKbUMsWUFBWSxHQUFBbEYsU0FBQSxDQUFBdGIsSUFBQTtjQUFBc2IsU0FBQSxDQUFBOWIsSUFBQTtjQUFBO1lBQUE7Y0FBQThiLFNBQUEsQ0FBQS9iLElBQUE7Y0FBQStiLFNBQUEsQ0FBQXpXLEVBQUEsR0FBQXlXLFNBQUE7Y0FtQlosSUFBSSxDQUFDL29CLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHlCQUF5QixFQUFBc29CLFNBQUEsQ0FBQXpXLEVBQUcsQ0FBQztjQUFDLE9BQUF5VyxTQUFBLENBQUF2YixNQUFBLFdBRTFDO2dCQUFDaUIsTUFBTSxFQUFFO2NBQVEsQ0FBQztZQUFBO2NBR3JCQSxNQUEyQixHQUFHLElBQUksQ0FBQ2lpQixxQ0FBcUMsQ0FBQ3pDLFlBQVksQ0FBQztjQUFBLE1BRXhGeGYsTUFBTSxLQUFLLElBQUk7Z0JBQUFzYSxTQUFBLENBQUE5YixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBOGIsU0FBQSxDQUFBdmIsTUFBQSxXQUNWO2dCQUFDaUIsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYa2YsUUFBUSxHQUFHbDNCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQXF5QixTQUFBLENBQUE5YixJQUFBO2NBQUEsT0FDUyxJQUFJLENBQUMwakIsMENBQTBDLENBQUMxQyxZQUFZLENBQUM7WUFBQTtjQUEzRndDLHFCQUFxQixHQUFBMUgsU0FBQSxDQUFBdGIsSUFBQTtjQUUzQixJQUFJLENBQUN6TixPQUFPLENBQUNDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRXd3QixxQkFBcUIsRUFBRTlDLFFBQVEsR0FBR3ZJLEtBQUssQ0FBQztjQUFDLE9BQUEyRCxTQUFBLENBQUF2YixNQUFBLFdBRW5HaWpCLHFCQUFxQjtZQUFBO1lBQUE7Y0FBQSxPQUFBMUgsU0FBQSxDQUFBcmIsSUFBQTtVQUFBO1FBQUEsR0FBQW1iLFFBQUE7TUFBQSxDQUM3QixJQUFBbGIsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBZ3VCLHVCQUFBeUwsSUFBQSxFQUFBQyxJQUFBO01BQUEsUUFBQTFELHVCQUFBLEdBQUFBLHVCQUFBLElBQUExZ0IsNklBQUEsZUFBQUMsMklBQUEsQ0FFRCxTQUFBc2MsU0FBNkJuRixNQUFlLEVBQUV0VSxNQUFjO1FBQUEsSUFBQTVWLFVBQUE7UUFBQSxJQUFBMlMsT0FBQSxFQUFBcEMsR0FBQSxFQUFBMkMsUUFBQSxFQUFBVSxJQUFBO1FBQUEsT0FBQWIsMklBQUEsVUFBQXVjLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBbGMsSUFBQSxHQUFBa2MsU0FBQSxDQUFBamMsSUFBQTtZQUFBO2NBQzFELElBQUksR0FBQXRULFVBQUEsR0FBQ0UsU0FBUyxjQUFBRixVQUFBLGVBQVRBLFVBQUEsQ0FBV20zQixVQUFVLEdBQUU7Z0JBQ3BCeGtCLE9BQU8sR0FBRyxJQUFJLENBQUM4YyxhQUFhLENBQUN2RixNQUFNLEVBQUV0VSxNQUFNLENBQUM7Y0FDcEQ7Y0FFTXJGLEdBQUcsR0FBRyxJQUFJLENBQUNpa0IsUUFBUSxDQUFDLENBQUN0SyxNQUFNLENBQUNyWixPQUFPLEVBQUUsUUFBUSxFQUFFcVosTUFBTSxDQUFDM2tCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDeUUsUUFBUSxDQUFDLENBQUM7Y0FDdEZrSixRQUFRLEdBQUcsSUFBSUssUUFBUSxDQUFDLENBQUM7Y0FDekJLLElBQTJCLEdBQUc7Z0JBQ2xDcWYsVUFBVSxFQUFWQSxVQUFVO2dCQUNWd0MsWUFBWSxFQUFFdkwsTUFBTSxDQUFDdUwsWUFBWTtnQkFDakM3ZixNQUFNLEVBQU5BLE1BQU07Z0JBQ042QyxPQUFPLEVBQUU7Y0FDWCxDQUFDO2NBRUR2RixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVuTSxJQUFJLENBQUMyRyxTQUFTLENBQUM0RixJQUFJLENBQUMsQ0FBQztjQUVqRDFULFNBQVMsQ0FBQ2kzQixVQUFVLENBQUM1bUIsR0FBRyxFQUFFMkMsUUFBUSxDQUFDO1lBQUM7WUFBQTtjQUFBLE9BQUFxYyxTQUFBLENBQUF4YixJQUFBO1VBQUE7UUFBQSxHQUFBc2IsUUFBQTtNQUFBLENBQ3JDLElBQUFyYixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWczQixTQUFpQjRDLElBQWMsRUFBTztNQUNwQyxJQUFNdHZCLEdBQUcsR0FBRyxJQUFJckUsR0FBRyxDQUFDLElBQUksQ0FBQ3d1QixJQUFJLENBQUM7TUFDOUIsSUFBTW9GLFdBQVcsR0FBR3Z2QixHQUFHLENBQUMySSxRQUFRLENBQUM5UCxLQUFLLENBQUMsR0FBRyxDQUFDO01BRTNDMDJCLFdBQVcsQ0FBQ2x3QixNQUFNLEdBQUdrd0IsV0FBVyxDQUFDbHdCLE1BQU0sR0FBRyxDQUFDO01BRTNDVyxHQUFHLENBQUMySSxRQUFRLEdBQUc0bUIsV0FBVyxDQUFDbjJCLE1BQU0sQ0FBQThTLEtBQUEsQ0FBbEJxakIsV0FBVyxFQUFBM2lCLDhJQUFBLENBQVcwaUIsSUFBSSxFQUFDLENBQUMxUixJQUFJLENBQUMsR0FBRyxDQUFDO01BRXBELE9BQU81ZCxHQUFHO0lBQ1o7RUFBQztJQUFBeEssR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXkyQixhQUFBLEVBQStCO01BQzdCLElBQU1uc0IsR0FBRyxHQUFHLElBQUlyRSxHQUFHLENBQUMsSUFBSSxDQUFDd3VCLElBQUksQ0FBQztNQUM5QixJQUFNZSxVQUFVLEdBQUd0Z0IsdUVBQXlCO01BQzVDLElBQU1oSixVQUFVLEdBQUdOLDJGQUF5QztNQUU1RHRCLEdBQUcsQ0FBQ2xGLE1BQU0sT0FBQTFCLE1BQUEsQ0FBTyxJQUFJd0IsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUVzd0IsVUFBVSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUV0cEIsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUF4SSxNQUFBLENBQUtwRSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUNpTixRQUFRLENBQUMsQ0FBQyxDQUFFO01BRWxKLE9BQU9sQyxHQUFHLENBQUNrQyxRQUFRLENBQUMsQ0FBQztJQUN2QjtFQUFDO0lBQUExTSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNDNCLDZCQUFxQzdnQixRQUFrQixFQUFpQjtNQUN0RSxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ08sTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxnQkFBZ0I7UUFDekIsS0FBSyxHQUFHO1VBQ04sT0FBTyxhQUFhO1FBQ3RCLEtBQUssR0FBRztVQUNOLE9BQU8sNEJBQTRCO1FBQ3JDLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLHlCQUF5QjtRQUNsQyxLQUFLLEdBQUc7VUFDTixPQUFPLGVBQWU7UUFDeEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxVQUFVO1FBQ25CLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QjtVQUNFLE9BQU8sUUFBUTtNQUNuQjtJQUNGO0VBQUM7SUFBQXhYLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzM0IsK0JBQXVDdmdCLFFBQWtCLEVBQW1CO01BQzFFLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2IsT0FBTyxRQUFRO01BQ2pCO01BRUEsUUFBUUEsUUFBUSxDQUFDTyxNQUFNO1FBQ3JCLEtBQUssR0FBRztVQUNOLE9BQU8sSUFBSTtRQUNiLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QixLQUFLLEdBQUc7VUFDTixPQUFPLGdCQUFnQjtRQUN6QixLQUFLLEdBQUc7VUFDTixPQUFPLGFBQWE7UUFDdEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8seUJBQXlCO1FBQ2xDLEtBQUssR0FBRztVQUNOLE9BQU8sZUFBZTtRQUN4QixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBeFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWs0QiwwQ0FBa0RuaEIsUUFBa0IsRUFBOEI7TUFDaEcsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBeFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXk0QixnREFBd0QxaEIsUUFBa0IsRUFBb0M7TUFDNUcsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBeFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWs1QixzQ0FBOENuaUIsUUFBa0IsRUFBMEI7TUFDeEYsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBeFgsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXU1QixzQ0FBOEN4aUIsUUFBa0IsRUFBdUI7TUFDckYsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNPLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBeFgsR0FBQTtJQUFBRSxLQUFBLFdBQUF1M0IsdUNBQUF1QyxJQUFBLEVBQUFDLElBQUE7TUFBQSxRQUFBOUQsdUNBQUEsR0FBQUEsdUNBQUEsSUFBQTNnQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUE2YyxTQUFxRC9lLE9BQWUsRUFBRTBELFFBQWtCO1FBQUEsSUFBQTlGLElBQUEsRUFBQThsQixpQkFBQTtRQUFBLE9BQUF4aEIsMklBQUEsVUFBQWdkLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBM2MsSUFBQSxHQUFBMmMsU0FBQSxDQUFBMWMsSUFBQTtZQUFBO2NBQUEwYyxTQUFBLENBQUExYyxJQUFBO2NBQUEsT0FDbkVpQixRQUFRLENBQUNpakIsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1Qi9vQixJQUFJLEdBQUF1aEIsU0FBQSxDQUFBbGMsSUFBQTtjQUNKeWdCLGlCQUF5QyxHQUFHO2dCQUFDemYsTUFBTSxFQUFFckcsSUFBSSxDQUFDcUc7Y0FBTSxDQUFDO2NBRXZFeWYsaUJBQWlCLENBQUNySyxNQUFNLEdBQUc7Z0JBQ3pCclosT0FBTyxFQUFQQSxPQUFPO2dCQUNQdEwsUUFBUSxFQUFFa0osSUFBSSxDQUFDbEosUUFBUTtnQkFDdkJrd0IsWUFBWSxFQUFFaG5CLElBQUksQ0FBQ2duQjtjQUNyQixDQUFDO2NBRURsQixpQkFBaUIsQ0FBQy9LLEdBQUcsR0FBRy9hLElBQUksQ0FBQythLEdBQUc7Y0FFaEMsSUFBSS9hLElBQUksRUFBRTtnQkFDUixJQUFJQSxJQUFJLENBQUNncEIsZ0JBQWdCLEVBQUU7a0JBQ3pCbEQsaUJBQWlCLENBQUNrRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLDBDQUEwQyxDQUFDanBCLElBQUksQ0FBQ2dwQixnQkFBZ0IsQ0FBQztnQkFDN0c7Z0JBRUEsSUFBSWhwQixJQUFJLENBQUMrbUIsNEJBQTRCLElBQUkvbUIsSUFBSSxDQUFDK21CLDRCQUE0QixDQUFDYixrQkFBa0IsRUFBRTtrQkFDN0ZKLGlCQUFpQixDQUFDaUIsNEJBQTRCLEdBQUc7b0JBQUNiLGtCQUFrQixFQUFFbG1CLElBQUksQ0FBQyttQiw0QkFBNEIsQ0FBQ2I7a0JBQWtCLENBQUM7Z0JBQzdIO2dCQUVBLElBQUlsbUIsSUFBSSxDQUFDa3BCLCtCQUErQixJQUFJbHBCLElBQUksQ0FBQ2twQiwrQkFBK0IsQ0FBQ2hELGtCQUFrQixFQUFFO2tCQUNuR0osaUJBQWlCLENBQUNvRCwrQkFBK0IsR0FBRztvQkFBQ2hELGtCQUFrQixFQUFFbG1CLElBQUksQ0FBQ2twQiwrQkFBK0IsQ0FBQ2hEO2tCQUFrQixDQUFDO2dCQUNuSTtnQkFFQSxJQUFJbG1CLElBQUksQ0FBQ21wQiw4QkFBOEIsSUFBSW5wQixJQUFJLENBQUNtcEIsOEJBQThCLENBQUNqRCxrQkFBa0IsRUFBRTtrQkFDakdKLGlCQUFpQixDQUFDcUQsOEJBQThCLEdBQUc7b0JBQUNqRCxrQkFBa0IsRUFBRWxtQixJQUFJLENBQUNtcEIsOEJBQThCLENBQUNqRDtrQkFBa0IsQ0FBQztnQkFDakk7Y0FDRjtjQUFDLE9BQUEzRSxTQUFBLENBQUFuYyxNQUFBLFdBRU0wZ0IsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUF2RSxTQUFBLENBQUFqYyxJQUFBO1VBQUE7UUFBQSxHQUFBNmIsUUFBQTtNQUFBLENBQ3pCLElBQUE1YixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLFdBQUE2M0IscUNBQUF3QyxJQUFBLEVBQUFDLElBQUE7TUFBQSxRQUFBcEUscUNBQUEsR0FBQUEscUNBQUEsSUFBQTVnQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFnbEIsVUFBbURsbkIsT0FBZSxFQUFFMEQsUUFBa0I7UUFBQSxJQUFBOUYsSUFBQSxFQUFBdXBCLGVBQUE7UUFBQSxPQUFBamxCLDJJQUFBLFVBQUFrbEIsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUE3a0IsSUFBQSxHQUFBNmtCLFVBQUEsQ0FBQTVrQixJQUFBO1lBQUE7Y0FBQTRrQixVQUFBLENBQUE1a0IsSUFBQTtjQUFBLE9BQ2pFaUIsUUFBUSxDQUFDaWpCLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUIvb0IsSUFBSSxHQUFBeXBCLFVBQUEsQ0FBQXBrQixJQUFBO2NBQ0pra0IsZUFBcUMsR0FBRztnQkFBQ2xqQixNQUFNLEVBQUVyRyxJQUFJLENBQUNxRztjQUFNLENBQUM7Y0FFbkVrakIsZUFBZSxDQUFDOU4sTUFBTSxHQUFHO2dCQUN2QnJaLE9BQU8sRUFBUEEsT0FBTztnQkFDUHRMLFFBQVEsRUFBRWtKLElBQUksQ0FBQ2xKLFFBQVE7Z0JBQ3ZCa3dCLFlBQVksRUFBRWhuQixJQUFJLENBQUNnbkI7Y0FDckIsQ0FBQztjQUVELElBQUlobkIsSUFBSSxFQUFFO2dCQUNSLElBQUlBLElBQUksQ0FBQ2dwQixnQkFBZ0IsRUFBRTtrQkFDekJPLGVBQWUsQ0FBQ1AsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQ2pwQixJQUFJLENBQUNncEIsZ0JBQWdCLENBQUM7Z0JBQzNHO2dCQUVBLElBQUlocEIsSUFBSSxDQUFDK21CLDRCQUE0QixJQUFJL21CLElBQUksQ0FBQyttQiw0QkFBNEIsQ0FBQ2Isa0JBQWtCLEVBQUU7a0JBQzdGcUQsZUFBZSxDQUFDeEMsNEJBQTRCLEdBQUc7b0JBQUNiLGtCQUFrQixFQUFFbG1CLElBQUksQ0FBQyttQiw0QkFBNEIsQ0FBQ2I7a0JBQWtCLENBQUM7Z0JBQzNIO2dCQUVBLElBQUlsbUIsSUFBSSxDQUFDa3BCLCtCQUErQixJQUFJbHBCLElBQUksQ0FBQ2twQiwrQkFBK0IsQ0FBQ2hELGtCQUFrQixFQUFFO2tCQUNuR3FELGVBQWUsQ0FBQ0wsK0JBQStCLEdBQUc7b0JBQUNoRCxrQkFBa0IsRUFBRWxtQixJQUFJLENBQUNrcEIsK0JBQStCLENBQUNoRDtrQkFBa0IsQ0FBQztnQkFDakk7Z0JBRUEsSUFBSWxtQixJQUFJLENBQUNtcEIsOEJBQThCLElBQUlucEIsSUFBSSxDQUFDbXBCLDhCQUE4QixDQUFDakQsa0JBQWtCLEVBQUU7a0JBQ2pHcUQsZUFBZSxDQUFDSiw4QkFBOEIsR0FBRztvQkFBQ2pELGtCQUFrQixFQUFFbG1CLElBQUksQ0FBQ21wQiw4QkFBOEIsQ0FBQ2pEO2tCQUFrQixDQUFDO2dCQUMvSDtjQUNGO2NBQUMsT0FBQXVELFVBQUEsQ0FBQXJrQixNQUFBLFdBRU1ta0IsZUFBZTtZQUFBO1lBQUE7Y0FBQSxPQUFBRSxVQUFBLENBQUFua0IsSUFBQTtVQUFBO1FBQUEsR0FBQWdrQixTQUFBO01BQUEsQ0FDdkIsSUFBQS9qQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWs2QiwyQ0FBbUR6ZixhQUErQixFQUFvQjtNQUNwRyxJQUFNd2YsZ0JBQWtDLEdBQUc7UUFBQ2plLFVBQVUsRUFBRTtNQUFFLENBQUM7TUFFM0QsSUFBSXZCLGFBQWEsQ0FBQ2tnQixZQUFZLEVBQUU7UUFDOUJWLGdCQUFnQixDQUFDVSxZQUFZLEdBQUdsZ0IsYUFBYSxDQUFDa2dCLFlBQVk7TUFDNUQ7TUFFQSxJQUFJLE9BQU9sZ0IsYUFBYSxDQUFDbWdCLG9CQUFvQixLQUFLLFFBQVEsRUFBRTtRQUMxRFgsZ0JBQWdCLENBQUNXLG9CQUFvQixHQUFHbmdCLGFBQWEsQ0FBQ21nQixvQkFBb0I7TUFDNUU7TUFFQSxJQUFJbmdCLGFBQWEsQ0FBQ3VCLFVBQVUsRUFBRTtRQUM1QixJQUFNQSxVQUEwQixHQUFHLEVBQUU7UUFFckMsS0FBSyxJQUFJckQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHOEIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDclMsTUFBTSxFQUFFZ1AsQ0FBQyxFQUFFLEVBQUU7VUFDeERxRCxVQUFVLENBQUN0VCxJQUFJLENBQUM7WUFDZHVULElBQUksRUFBRXhCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3JELENBQUMsQ0FBQyxDQUFDc0QsSUFBSTtZQUN0Q0MsUUFBUSxFQUFFekIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDckQsQ0FBQyxDQUFDLENBQUN1RCxRQUFRO1lBQzlDQyxVQUFVLEVBQUUxQixhQUFhLENBQUN1QixVQUFVLENBQUNyRCxDQUFDLENBQUMsQ0FBQ3dEO1VBQzFDLENBQUMsQ0FBQztRQUNKO1FBRUE4ZCxnQkFBZ0IsQ0FBQ2plLFVBQVUsR0FBR0EsVUFBVTtNQUMxQztNQUVBLElBQUl2QixhQUFhLENBQUNvZ0Isa0JBQWtCLEVBQUU7UUFDcENaLGdCQUFnQixDQUFDWSxrQkFBa0IsR0FBR3BnQixhQUFhLENBQUNvZ0Isa0JBQWtCO01BQ3hFO01BRUEsSUFBSXBnQixhQUFhLENBQUNxZ0IsYUFBYSxFQUFFO1FBQy9CYixnQkFBZ0IsQ0FBQ2EsYUFBYSxHQUFHcmdCLGFBQWEsQ0FBQ3FnQixhQUFhO01BQzlEO01BRUEsT0FBT2IsZ0JBQWdCO0lBQ3pCO0VBQUM7SUFBQW42QixHQUFBO0lBQUFFLEtBQUEsV0FBQW00QixrREFBQTRDLElBQUE7TUFBQSxRQUFBNUUsa0RBQUEsR0FBQUEsa0RBQUEsSUFBQTdnQiw2SUFBQSxlQUFBQywySUFBQSxDQUNELFNBQUF5bEIsVUFBZ0Vqa0IsUUFBa0I7UUFBQSxJQUFBOUYsSUFBQSxFQUFBK21CLDRCQUFBO1FBQUEsT0FBQXppQiwySUFBQSxVQUFBMGxCLFdBQUFDLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBcmxCLElBQUEsR0FBQXFsQixVQUFBLENBQUFwbEIsSUFBQTtZQUFBO2NBQUFvbEIsVUFBQSxDQUFBcGxCLElBQUE7Y0FBQSxPQUM3RGlCLFFBQVEsQ0FBQ2lqQixJQUFJLENBQUMsQ0FBQztZQUFBO2NBQTVCL29CLElBQUksR0FBQWlxQixVQUFBLENBQUE1a0IsSUFBQTtjQUNKMGhCLDRCQUErRCxHQUFHO2dCQUFDMWdCLE1BQU0sRUFBRXJHLElBQUksQ0FBQ3FHO2NBQU0sQ0FBQztjQUU3RixJQUFJckcsSUFBSSxJQUFJQSxJQUFJLENBQUNrbUIsa0JBQWtCLEVBQUU7Z0JBQ25DYSw0QkFBNEIsQ0FBQ2Isa0JBQWtCLEdBQUdsbUIsSUFBSSxDQUFDa21CLGtCQUFrQjtjQUMzRTtjQUFDLE9BQUErRCxVQUFBLENBQUE3a0IsTUFBQSxXQUVNMmhCLDRCQUE0QjtZQUFBO1lBQUE7Y0FBQSxPQUFBa0QsVUFBQSxDQUFBM2tCLElBQUE7VUFBQTtRQUFBLEdBQUF5a0IsU0FBQTtNQUFBLENBQ3BDLElBQUF4a0IsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7SUFBQWhQLEdBQUE7SUFBQUUsS0FBQSxXQUFBbTVCLDhDQUFBZ0MsSUFBQTtNQUFBLFFBQUEvRSw4Q0FBQSxHQUFBQSw4Q0FBQSxJQUFBOWdCLDZJQUFBLGVBQUFDLDJJQUFBLENBRUQsU0FBQTZsQixVQUE0RHJrQixRQUFrQjtRQUFBLElBQUE5RixJQUFBLEVBQUErbkIsd0JBQUE7UUFBQSxPQUFBempCLDJJQUFBLFVBQUE4bEIsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF6bEIsSUFBQSxHQUFBeWxCLFVBQUEsQ0FBQXhsQixJQUFBO1lBQUE7Y0FBQXdsQixVQUFBLENBQUF4bEIsSUFBQTtjQUFBLE9BQ3pEaUIsUUFBUSxDQUFDaWpCLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUIvb0IsSUFBSSxHQUFBcXFCLFVBQUEsQ0FBQWhsQixJQUFBO2NBQ0owaUIsd0JBQXVELEdBQUc7Z0JBQzlEMWhCLE1BQU0sRUFBRXJHLElBQUksQ0FBQ3FHLE1BQU07Z0JBQ25CMkQsT0FBTyxFQUFFO2NBQ1gsQ0FBQztjQUVELElBQUloSyxJQUFJLEVBQUU7Z0JBQ1IsSUFBSUEsSUFBSSxDQUFDZ0ssT0FBTyxFQUFFO2tCQUNoQitkLHdCQUF3QixDQUFDL2QsT0FBTyxHQUFHaEssSUFBSSxDQUFDZ0ssT0FBTztnQkFDakQ7Y0FDRjtjQUFDLE9BQUFxZ0IsVUFBQSxDQUFBamxCLE1BQUEsV0FFTTJpQix3QkFBd0I7WUFBQTtZQUFBO2NBQUEsT0FBQXNDLFVBQUEsQ0FBQS9rQixJQUFBO1VBQUE7UUFBQSxHQUFBNmtCLFNBQUE7TUFBQSxDQUNoQyxJQUFBNWtCLEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsV0FBQXc1QiwyQ0FBQStCLElBQUE7TUFBQSxRQUFBbEYsMkNBQUEsR0FBQUEsMkNBQUEsSUFBQS9nQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFpbUIsVUFBeUR6a0IsUUFBa0I7UUFBQSxJQUFBOUYsSUFBQSxFQUFBZ2hCLGFBQUE7UUFBQSxPQUFBMWMsMklBQUEsVUFBQWttQixXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTdsQixJQUFBLEdBQUE2bEIsVUFBQSxDQUFBNWxCLElBQUE7WUFBQTtjQUFBNGxCLFVBQUEsQ0FBQTVsQixJQUFBO2NBQUEsT0FDdERpQixRQUFRLENBQUNpakIsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1Qi9vQixJQUFJLEdBQUF5cUIsVUFBQSxDQUFBcGxCLElBQUE7Y0FDSjJiLGFBQXlDLEdBQUc7Z0JBQUMzYSxNQUFNLEVBQUVyRyxJQUFJLENBQUNxRztjQUFNLENBQUM7Y0FBQSxPQUFBb2tCLFVBQUEsQ0FBQXJsQixNQUFBLFdBRWhFNGIsYUFBYTtZQUFBO1lBQUE7Y0FBQSxPQUFBeUosVUFBQSxDQUFBbmxCLElBQUE7VUFBQTtRQUFBLEdBQUFpbEIsU0FBQTtNQUFBLENBQ3JCLElBQUFobEIsS0FBQSxPQUFBMUgsU0FBQTtJQUFBO0VBQUE7RUFBQSxPQUFBa21CLFFBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOTFCSDtBQUNBO0FBQ0E7O0FBRStDO0FBQ0E7QUFDUTtBQUNBO0FBQ2Q7QUFDVztBQUFBLElBTS9CMkcsYUFBYTtFQVFoQyxTQUFBQSxjQUFZQyxjQUFjLEVBQUUzSyxtQkFBd0MsRUFBRTtJQUFBOXhCLDJJQUFBLE9BQUF3OEIsYUFBQTtJQUFBdjhCLDJJQUFBLGtCQVBsQ3NJLG9FQUF1QixDQUFDLGVBQWUsQ0FBQztJQUFBdEksMklBQUE7SUFBQUEsMklBQUEsOEJBRXJDLElBQUlDLHlEQUFjLENBQUMsQ0FBQztJQUFBRCwySUFBQTtJQUFBQSwySUFBQTtJQUFBQSwySUFBQSwrQkFHNUIsQ0FBQztJQUc5QixJQUFJLENBQUMwcUIsZUFBZSxHQUFHOFIsY0FBYztJQUNyQyxJQUFJLENBQUM1UyxvQkFBb0IsR0FBR2lJLG1CQUFtQjtJQUMvQyxJQUFJLENBQUNuSCxlQUFlLENBQUMyRSxXQUFXLENBQUN6dEIsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM1QztFQUFDbkIsd0lBQUEsQ0FBQTg3QixhQUFBO0lBQUE3N0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWl1QixNQUFNM2pCLEdBQVEsRUFBRWxCLEtBQWEsRUFBK0I7TUFBQSxJQUFBL0ksS0FBQTtNQUMxRCxPQUFPMndCLDRGQUE0QyxDQUFDMW1CLEdBQUcsQ0FBQyxDQUNyRHdNLElBQUksQ0FBQyxVQUFBMFYsUUFBUSxFQUFJO1FBQ2hCbnNCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUN1QixNQUFNLENBQUNyckIsS0FBSyxHQUFHLElBQUk7UUFDeENLLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxHQUFHd3NCLFFBQVE7UUFDOUNuc0IsS0FBSSxDQUFDd0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUwakIsUUFBUSxDQUFDaGdCLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFNUQsT0FBT2dnQixRQUFRLENBQUM1SSxTQUFTLENBQUN4YSxLQUFLLEVBQUUsSUFBSSxFQUFFL0ksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3dDLFlBQVksQ0FBQ3RzQixLQUFLLENBQUM7TUFDakYsQ0FBQyxDQUFDLENBQ0Q4VyxJQUFJLENBQUMsVUFBQU8sSUFBQSxFQUEyRDtRQUFBLElBQXpEQyxNQUFNLEdBQUFELElBQUEsQ0FBTkMsTUFBTTtVQUFFb1YsTUFBTSxHQUFBclYsSUFBQSxDQUFOcVYsTUFBTTtVQUFFME4sOEJBQThCLEdBQUEvaUIsSUFBQSxDQUE5QitpQiw4QkFBOEI7VUFBRXBPLEdBQUcsR0FBQTNVLElBQUEsQ0FBSDJVLEdBQUc7UUFDekQzckIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEdBQUcwc0IsTUFBTTtRQUMxQ3JzQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDa0MsR0FBRyxDQUFDaHNCLEtBQUssR0FBR2dzQixHQUFHO1FBRXBDM3JCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNvSiw2Q0FBNkMsQ0FBQyxDQUFDO1FBRXBFN3lCLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ29HLEtBQUssQ0FDaEIsbURBQW1ELEVBQ25ENU8sS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQzdCdVAsTUFBTSxFQUNOOGlCLDhCQUNGLENBQUM7UUFFRC81QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDcUosaUNBQWlDLENBQUM3YixNQUFNLENBQUM7UUFFakdqWCxLQUFJLENBQUN5cEIsZUFBZSxDQUFDbUosV0FBVyxDQUFDM2IsTUFBTSxDQUFDO1FBRXhDLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7VUFDbkI7UUFDRjtRQUVBLElBQU11a0IsUUFBUSxHQUFHekIsOEJBQThCLENBQUNqRCxrQkFBa0IsQ0FBQ2hhLEdBQUc7UUFDdEUsSUFBTWxDLE9BQU8sR0FBRztVQUNkNmdCLGVBQWUsRUFBRXg4QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUd5c0IsR0FBRyxHQUFHM3JCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDb2UsYUFBYSxHQUFHLENBQUM7VUFDekY0TixHQUFHLEVBQUhBO1FBQ0YsQ0FBQztRQUVELE9BQU8rUCxxRUFBc0IsQ0FBQzE3QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxFQUFFSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFBRTh6QixRQUFRLEVBQUU1Z0IsT0FBTyxDQUFDLENBQ3JIbkUsSUFBSSxDQUFDLFVBQUFrbEIsTUFBTSxFQUFJO1VBQ2QzN0IsS0FBSSxDQUFDNDdCLE9BQU8sQ0FBQ0QsTUFBTSxDQUFDO1VBRXBCLE9BQU9BLE1BQU07UUFDZixDQUFDLENBQUMsQ0FDRDVrQixLQUFLLENBQUMsVUFBQXJOLENBQUMsRUFBSTtVQUNWMUosS0FBSSxDQUFDd0ksT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVTLENBQUMsQ0FBQztVQUNoRDFKLEtBQUksQ0FBQ3lwQixlQUFlLENBQUN5QixPQUFPLENBQUN2ckIsS0FBSyxHQUFHLEtBQUs7VUFDMUNLLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7VUFDMUNLLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsMkRBQW9CO1FBQ3pELENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQTF0QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaThCLFFBQWdCRCxNQUFtQixFQUFRO01BQUEsSUFBQTM2QixNQUFBO01BQ3pDLElBQUksQ0FBQzY2QixtQkFBbUIsQ0FBQy83QixPQUFPLENBQUMsQ0FBQztNQUVsQyxJQUFNdzBCLE9BQU8sR0FBR3B6QixNQUFNLENBQUNzRSxVQUFVLENBQUMsWUFBTTtRQUN0QyxJQUFNczJCLG1CQUFtQixHQUFHSix3RUFBeUIsQ0FBQyxDQUFDO1FBRXZELElBQUkxNkIsTUFBSSxDQUFDKzZCLGlCQUFpQixJQUN4Qi82QixNQUFJLENBQUMrNkIsaUJBQWlCLENBQUNDLFdBQVcsSUFBSUYsbUJBQW1CLENBQUNFLFdBQVcsSUFDckVoN0IsTUFBSSxDQUFDKzZCLGlCQUFpQixDQUFDRSxZQUFZLElBQUlILG1CQUFtQixDQUFDRyxZQUFZLEVBQ3ZFO1VBQ0FqN0IsTUFBSSxDQUFDazdCLG9CQUFvQixFQUFFO1VBRTNCLElBQUlsN0IsTUFBSSxDQUFDazdCLG9CQUFvQixHQUFHLENBQUMsRUFBRTtZQUNqQ2w3QixNQUFJLENBQUNrN0Isb0JBQW9CLEdBQUcsQ0FBQztZQUM3Qmw3QixNQUFJLENBQUN5b0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLG1FQUE0QjtZQUUvRG5zQixNQUFJLENBQUN5b0IsZUFBZSxDQUFDMkIsT0FBTyxDQUFDenJCLEtBQUssR0FBRyxLQUFLO1lBQzFDcUIsTUFBSSxDQUFDeW9CLGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQ3ZyQixLQUFLLEdBQUcsSUFBSTtZQUN6Q2c4QixNQUFNLENBQUM3N0IsT0FBTyxDQUFDLENBQUM7WUFDaEJrQixNQUFJLENBQUM2NkIsbUJBQW1CLENBQUMvN0IsT0FBTyxDQUFDLENBQUM7WUFFbEMsSUFBTWdWLE9BQU8sR0FBRzlULE1BQUksQ0FBQzJuQixvQkFBb0IsQ0FBQyxDQUFDLENBQ3hDNVIsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7Y0FDVjFJLE1BQUksQ0FBQ3dILE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLGdDQUFnQyxFQUFFUyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDO1lBRUo7VUFDRjtRQUNGLENBQUMsTUFBTTtVQUNMMUksTUFBSSxDQUFDazdCLG9CQUFvQixHQUFHLENBQUM7UUFDL0I7UUFFQSxJQUFJbDdCLE1BQUksQ0FBQ3lvQixlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLENBQUN3OEIsTUFBTSxJQUFJbjdCLE1BQUksQ0FBQ3lvQixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEtBQUt3dEIsMkRBQW9CLEVBQUU7VUFDL0duc0IsTUFBSSxDQUFDeW9CLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0QiwwREFBbUI7UUFDeEQ7UUFFQSxJQUFJLENBQUNuc0IsTUFBSSxDQUFDeW9CLGVBQWUsQ0FBQ1osWUFBWSxDQUFDbHBCLEtBQUssQ0FBQ3c4QixNQUFNLElBQUluN0IsTUFBSSxDQUFDeW9CLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssS0FBS3d0QiwyREFBb0IsRUFBRTtVQUNoSG5zQixNQUFJLENBQUN5b0IsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDJEQUFvQjtRQUN6RDtRQUVBbnNCLE1BQUksQ0FBQys2QixpQkFBaUIsR0FBR0QsbUJBQW1CO1FBQzVDOTZCLE1BQUksQ0FBQzQ2QixPQUFPLENBQUNELE1BQU0sQ0FBQztNQUN0QixDQUFDLEVBQUUsSUFBSSxDQUFDO01BRVIsSUFBSSxDQUFDRSxtQkFBbUIsQ0FBQ2w3QixHQUFHLENBQUMsSUFBSUMscURBQVUsQ0FBQyxZQUFNO1FBQ2hEMmMsWUFBWSxDQUFDK1csT0FBTyxDQUFDO01BQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBNzBCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLFFBQUEsRUFBZ0I7TUFDZCxJQUFJLENBQUMrN0IsbUJBQW1CLENBQUMvN0IsT0FBTyxDQUFDLENBQUM7SUFDcEM7RUFBQztFQUFBLE9BQUF3N0IsYUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25JSDtBQUNBO0FBQ0E7QUFDb0U7QUFDaEM7QUFDWDtBQUNlO0FBQ0o7QUFJN0IsSUFBTUksZ0JBQWdCLDBCQUFBblQsTUFBQTtFQUFBLFNBQUFtVCxpQkFBQTtJQUFBNThCLDJJQUFBLE9BQUE0OEIsZ0JBQUE7RUFBQTtFQUFBbDhCLHdJQUFBLENBQUFrOEIsZ0JBQUE7SUFBQWo4QixHQUFBO0lBQUFDLEdBQUEsRUFRM0IsU0FBQUEsSUFBQSxFQUFzQztNQUNwQyxPQUFPLElBQUksQ0FBQzA4QixVQUFVO0lBQ3hCO0VBQUM7SUFBQTM4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU8sSUFBSSxDQUFDMjhCLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUE1OEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQzQ4QixNQUFNO0lBQ3BCO0VBQUM7SUFBQTc4QixHQUFBO0lBQUFFLEtBQUEsV0FBQWl1QixNQUFBNVksRUFBQSxFQUFBMk0sR0FBQSxFQUFBRSxHQUFBLEVBQUFJLEdBQUE7TUFBQSxRQUFBc0csTUFBQSxHQUFBQSxNQUFBLElBQUF0VCw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFDLFFBQW1CMFQsWUFBOEIsRUFBRW5oQixRQUFnQixFQUFFOHpCLFFBQWdCLEVBQUU1Z0IsT0FBZ0M7UUFBQSxJQUFBNWEsS0FBQTtRQUFBLE9BQUFrViwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUNySCxJQUFJLENBQUM4bUIsUUFBUSxHQUFHM2hCLE9BQU87Y0FBQyxNQUVwQixJQUFJLENBQUN3aEIsVUFBVSxJQUFJLElBQUksQ0FBQ0UsTUFBTSxJQUFJLElBQUksQ0FBQ0QsZ0JBQWdCO2dCQUFBOW1CLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBUyxNQUFBLFdBQ2xELElBQUksQ0FBQ3dtQixNQUFNLENBQUMzVCxZQUFZLEVBQUVuaEIsUUFBUSxFQUFFOHpCLFFBQVEsQ0FBQztZQUFBO2NBQUEsTUFHbEQsQ0FBQ2wwQix5REFBbUIsSUFBSSxDQUFDQSwyREFBcUIsSUFBSSxDQUFDQSxxREFBZTtnQkFBQWlPLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDOUQsSUFBSXZRLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztZQUFBO2NBQUEsTUFHdEMsQ0FBQ29DLHlEQUFtQixJQUFJLENBQUNBLDJEQUFxQixJQUFJLENBQUNBLHFEQUFlO2dCQUFBaU8sUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUM5RCxJQUFJdlEsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO1lBQUE7Y0FBQSxPQUFBcVEsUUFBQSxDQUFBUyxNQUFBLFdBR3BELElBQUlxQixPQUFPLENBQUMsVUFBQTBCLE9BQU8sRUFBSTtnQkFDNUIsSUFBSXpSLHFEQUFlLEVBQUU7a0JBQ25CdEgsS0FBSSxDQUFDeThCLFFBQVEsR0FBRyxJQUFJO2tCQUNwQm4xQixxREFBZSxDQUFDLFVBQUFxMEIsTUFBTSxFQUFJO29CQUN4QjM3QixLQUFJLENBQUNvOEIsVUFBVSxHQUFHVCxNQUFNO29CQUV4QixJQUFJMzdCLEtBQUksQ0FBQ3k4QixRQUFRLEVBQUU7c0JBQ2pCejhCLEtBQUksQ0FBQ3k4QixRQUFRLEdBQUcsS0FBSztzQkFFckIxakIsT0FBTyxDQUFDL1ksS0FBSSxDQUFDdzhCLE1BQU0sQ0FBQzNULFlBQVksRUFBRW5oQixRQUFRLEVBQUU4ekIsUUFBUSxDQUFDLENBQUM7b0JBQ3hEO2tCQUNGLENBQUMsQ0FBQztnQkFDSjtnQkFFQSxJQUFJbDBCLHlEQUFtQixFQUFFO2tCQUN2QnRILEtBQUksQ0FBQ3k4QixRQUFRLEdBQUcsSUFBSTtrQkFDcEJuMUIseURBQW1CLENBQUMsVUFBQXEwQixNQUFNLEVBQUk7b0JBQzVCMzdCLEtBQUksQ0FBQ3E4QixnQkFBZ0IsR0FBR1YsTUFBTTtvQkFFOUIsSUFBSTM3QixLQUFJLENBQUN5OEIsUUFBUSxFQUFFO3NCQUNqQno4QixLQUFJLENBQUN5OEIsUUFBUSxHQUFHLEtBQUs7c0JBRXJCMWpCLE9BQU8sQ0FBQy9ZLEtBQUksQ0FBQ3c4QixNQUFNLENBQUMzVCxZQUFZLEVBQUVuaEIsUUFBUSxFQUFFOHpCLFFBQVEsQ0FBQyxDQUFDO29CQUN4RDtrQkFDRixDQUFDLENBQUM7Z0JBQ0o7Z0JBRUEsSUFBSWwwQiwyREFBcUIsRUFBRTtrQkFDekJ0SCxLQUFJLENBQUN5OEIsUUFBUSxHQUFHLElBQUk7a0JBQ3BCbjFCLDJEQUFxQixDQUFDLFVBQUFxMEIsTUFBTSxFQUFJO29CQUM5QjM3QixLQUFJLENBQUNzOEIsTUFBTSxHQUFHWCxNQUFNO29CQUVwQixJQUFJMzdCLEtBQUksQ0FBQ3k4QixRQUFRLEVBQUU7c0JBQ2pCejhCLEtBQUksQ0FBQ3k4QixRQUFRLEdBQUcsS0FBSztzQkFFckIxakIsT0FBTyxDQUFDL1ksS0FBSSxDQUFDdzhCLE1BQU0sQ0FBQzNULFlBQVksRUFBRW5oQixRQUFRLEVBQUU4ekIsUUFBUSxDQUFDLENBQUM7b0JBQ3hEO2tCQUNGLENBQUMsQ0FBQztnQkFDSjtjQUNGLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBam1CLFFBQUEsQ0FBQVcsSUFBQTtVQUFBO1FBQUEsR0FBQWYsT0FBQTtNQUFBLENBQ0gsSUFBQWdCLEtBQUEsT0FBQTFILFNBQUE7SUFBQTtFQUFBO0lBQUFoUCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaWUsU0FBQSxFQUE4QztNQUM1QyxJQUFJLElBQUksQ0FBQzhlLE9BQU8sRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDOWUsUUFBUSxDQUFDLENBQUM7TUFDaEM7TUFFQSxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUFuZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBeXhCLEtBQW9CdUwsTUFBZ0UsRUFBRTlULFlBQThCLEVBQUVuaEIsUUFBZ0IsRUFBRTh6QixRQUFnQixFQUFFNWdCLE9BQWdDLEVBQWU7TUFDdk0sSUFBTWdpQixvQkFBb0IsR0FBR3BCLFFBQVEsQ0FBQy80QixLQUFLLENBQUMsdUNBQXVDLENBQUM7TUFDcEYsSUFBTW82QixtQkFBbUIsR0FBR3JCLFFBQVEsQ0FBQy80QixLQUFLLENBQUMsd0NBQXdDLENBQUM7TUFDcEYsSUFBTXE2QixXQUFXLEdBQUdGLG9CQUFvQixJQUFJQSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBR0Esb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtNQUNsRyxJQUFNRyxXQUFXLEdBQUdGLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FBR0EsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtNQUUvRixJQUFJejNCLHNGQUFvQyxJQUFLLElBQUksQ0FBQ2czQixVQUFVLElBQUksSUFBSSxDQUFDQSxVQUFVLENBQUNqMkIsV0FBVyxDQUFDLENBQUUsRUFBRTtRQUM5RixJQUFJLENBQUN1MkIsT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQzlULFlBQVksRUFBRSxLQUFLLEVBQUVuaEIsUUFBUSxFQUFFcTFCLFdBQVcsRUFBRW5pQixPQUFPLENBQUM7UUFFOUUsSUFBSSxDQUFDOGhCLE9BQU8sQ0FBQzlPLEtBQUssQ0FBQyxDQUFDO1FBRXBCLE9BQU8sSUFBSSxDQUFDOE8sT0FBTztNQUNyQjtNQUVBLElBQUksQ0FBQ0EsT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQzlULFlBQVksRUFBRSxNQUFNLEVBQUVuaEIsUUFBUSxFQUFFbzFCLFdBQVcsRUFBRWxpQixPQUFPLENBQUM7TUFFL0UsSUFBSSxDQUFDOGhCLE9BQU8sQ0FBQzlPLEtBQUssQ0FBQyxDQUFDO01BRXBCLE9BQU8sSUFBSSxDQUFDOE8sT0FBTztJQUNyQjtFQUFDO0lBQUFqOUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTY4QixPQUFzQjNULFlBQThCLEVBQUVuaEIsUUFBZ0IsRUFBRTh6QixRQUFnQixFQUFlO01BQ3JHLElBQUksQ0FBQyxJQUFJLENBQUNjLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ0QsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUNELFVBQVUsRUFBRTtRQUM5RDtNQUNGO01BRUEsSUFBSSxJQUFJLENBQUNBLFVBQVUsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQ2hMLElBQUksQ0FBQzRMLCtDQUFTLEVBQUVuVSxZQUFZLEVBQUVuaEIsUUFBUSxFQUFFOHpCLFFBQVEsRUFBQXlCLGFBQUEsQ0FBQUEsYUFBQSxLQUN2RCxJQUFJLENBQUNWLFFBQVE7VUFDaEJXLFlBQVksRUFBRTkzQixzRkFBb0MrM0I7UUFBQSxFQUNuRCxDQUFDO01BQ0o7TUFFQSxJQUFJLElBQUksQ0FBQ2QsZ0JBQWdCLEVBQUU7UUFDekIsT0FBTyxJQUFJLENBQUNqTCxJQUFJLENBQUNnTSwrQ0FBUyxFQUFFdlUsWUFBWSxFQUFFbmhCLFFBQVEsRUFBRTh6QixRQUFRLEVBQUF5QixhQUFBLENBQUFBLGFBQUEsS0FDdkQsSUFBSSxDQUFDVixRQUFRO1VBQ2hCVyxZQUFZLEVBQUU5M0Isc0ZBQW9DKzNCO1FBQUEsRUFDbkQsQ0FBQztNQUNKO01BRUEsSUFBSSxJQUFJLENBQUNiLE1BQU0sRUFBRTtRQUNmLE9BQU8sSUFBSSxDQUFDbEwsSUFBSSxDQUFDaU0saURBQVcsRUFBRXhVLFlBQVksRUFBRW5oQixRQUFRLEVBQUU4ekIsUUFBUSxFQUFBeUIsYUFBQSxDQUFBQSxhQUFBLEtBQ3pELElBQUksQ0FBQ1YsUUFBUTtVQUNoQlcsWUFBWSxFQUFFOTNCLHNGQUFvQyszQjtRQUFBLEVBQ25ELENBQUM7TUFDSjtJQUNGO0VBQUM7RUFBQSxPQUFBekIsZ0JBQUE7QUFBQTtBQUNGMzhCLDJJQUFBLENBcElZMjhCLGdCQUFnQixjQUNELEtBQUs7QUFBQTM4QiwySUFBQSxDQURwQjI4QixnQkFBZ0I7QUFBQTM4QiwySUFBQSxDQUFoQjI4QixnQkFBZ0I7QUFBQTM4QiwySUFBQSxDQUFoQjI4QixnQkFBZ0I7QUFBQTM4QiwySUFBQSxDQUFoQjI4QixnQkFBZ0I7QUFBQTM4QiwySUFBQSxDQUFoQjI4QixnQkFBZ0IscUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYN0I7QUFDQTtBQUNBO0FBQ29EO0FBR047QUFBQSxJQUV6QnNCLFNBQVM7RUFRNUIsU0FBQUEsVUFBWW5VLFlBQThCLEVBQUVyVSxJQUFZLEVBQUU5TSxRQUFnQixFQUFFNDFCLFdBQW1CLEVBQUUxaUIsT0FBZ0MsRUFBRTtJQUFBOWIsMklBQUEsT0FBQWsrQixTQUFBO0lBQUFqK0IsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFDakksSUFBSSxDQUFDdytCLGFBQWEsR0FBRzFVLFlBQVk7SUFDakMsSUFBSSxDQUFDMlUsS0FBSyxHQUFHaHBCLElBQUk7SUFDakIsSUFBSSxDQUFDaXBCLFNBQVMsR0FBRy8xQixRQUFRO0lBQ3pCLElBQUksQ0FBQ2cyQixZQUFZLEdBQUdDLFNBQVMsQ0FBQ0wsV0FBVyxDQUFDLENBQUNNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQ2pFLElBQUksQ0FBQ3JCLFFBQVEsR0FBRzNoQixPQUFPO0VBQ3pCO0VBQUNwYix3SUFBQSxDQUFBdzlCLFNBQUE7SUFBQXY5QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaXVCLE1BQUEsRUFBYztNQUNaLElBQUk4Tix5RUFBMEIsRUFBRTtRQUM5QixJQUFJQSxxRkFBc0MsQ0FBQyxDQUFDLEVBQUU7VUFDNUMsSUFBSSxDQUFDZ0IsT0FBTyxHQUFHLElBQUloQix5RUFBMEIsQ0FBQztZQUM1Q21DLFlBQVksRUFBRSxJQUFJO1lBQ2xCQyxlQUFlLEVBQUUsQ0FBQztZQUNsQkMsb0JBQW9CLEVBQUUsQ0FBQztZQUN2QkMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQkMsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQkMsc0JBQXNCLEVBQUVDLFFBQVE7WUFDaENDLHdCQUF3QixFQUFFO1VBQzVCLENBQUMsQ0FBQztVQUNGLElBQUksQ0FBQzFCLE9BQU8sQ0FBQzJCLFVBQVUsQ0FBQyxJQUFJLENBQUNYLFlBQVksQ0FBQztVQUMxQyxJQUFJLENBQUNoQixPQUFPLENBQUM0QixXQUFXLENBQUMsSUFBSSxDQUFDZixhQUFhLENBQUM7UUFDOUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDQSxhQUFhLENBQUNnQixXQUFXLENBQUMsK0JBQStCLENBQUMsRUFBRTtVQUMxRSxJQUFJLENBQUNoQixhQUFhLENBQUM1M0IsR0FBRyxHQUFHLElBQUksQ0FBQyszQixZQUFZO1FBQzVDO01BQ0Y7SUFDRjtFQUFDO0lBQUFqK0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXdHLFlBQUEsRUFBdUI7TUFDckIsT0FBT3UxQix5RUFBMEIsSUFBSUEscUZBQXNDLENBQUMsQ0FBQztJQUMvRTtFQUFDO0lBQUFqOEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWllLFNBQUEsRUFBdUM7TUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQzhlLE9BQU8sRUFBRTtRQUNqQixPQUFPO1VBQ0wzTyxLQUFLLEVBQUUsQ0FBQztVQUNSRSxNQUFNLEVBQUUsQ0FBQztVQUNUK04sV0FBVyxFQUFFLEdBQUc7VUFDaEJyUSxHQUFHLEVBQUUsR0FBRztVQUNSNlMsWUFBWSxFQUFFQyx5RUFBNkJDO1FBQzdDLENBQUM7TUFDSDtNQUVBLElBQU1DLFVBQVUsR0FBRztRQUNqQjVRLEtBQUssRUFBRSxJQUFJLENBQUMyTyxPQUFPLENBQUNrQyxLQUFLLENBQUNDLFdBQVc7UUFDckM1USxNQUFNLEVBQUUsSUFBSSxDQUFDeU8sT0FBTyxDQUFDa0MsS0FBSyxDQUFDRSxZQUFZO1FBQ3ZDOUMsV0FBVyxFQUFFLElBQUksQ0FBQ1UsT0FBTyxDQUFDa0MsS0FBSyxDQUFDNUMsV0FBVztRQUMzQ3JRLEdBQUcsRUFBRSxHQUFHO1FBQ1I2UyxZQUFZLEVBQUVDLHFFQUF5QjtRQUN2Q3hDLFlBQVksRUFBRTtNQUNoQixDQUFDO01BRUQsSUFBSSxJQUFJLENBQUNzQixhQUFhLENBQUN3QixRQUFRLElBQUksSUFBSSxDQUFDeEIsYUFBYSxDQUFDd0IsUUFBUSxDQUFDejFCLE1BQU0sRUFBRTtRQUNyRXExQixVQUFVLENBQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDc0IsYUFBYSxDQUFDd0IsUUFBUSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzlEO01BRUEsSUFBSSxJQUFJLENBQUN0QyxPQUFPLENBQUN1QyxnQkFBZ0IsQ0FBQzNVLEtBQUssS0FBSyxNQUFNLEVBQUU7UUFDbERxVSxVQUFVLENBQUNILFlBQVksR0FBR0MscUVBQXlCO01BQ3JELENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQy9CLE9BQU8sQ0FBQ3VDLGdCQUFnQixDQUFDM1UsS0FBSyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUNvUyxPQUFPLENBQUN1QyxnQkFBZ0IsQ0FBQzNVLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDN0dxVSxVQUFVLENBQUNILFlBQVksR0FBR0MseUVBQTZCO01BQ3pELENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQy9CLE9BQU8sQ0FBQ3VDLGdCQUFnQixDQUFDM1UsS0FBSyxDQUFDM21CLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMrNEIsT0FBTyxDQUFDdUMsZ0JBQWdCLENBQUMzVSxLQUFLLENBQUMzbUIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzdIZzdCLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyx3RUFBNEI7TUFDeEQsQ0FBQyxNQUFNO1FBQ0xFLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyxzRUFBMEI7TUFDdEQ7TUFFQSxJQUFNekMsV0FBVyxHQUFHLElBQUksQ0FBQ3VCLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO01BQzFELElBQU0yQixlQUFlLEdBQUcsQ0FBQ2pnQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDcTlCLFFBQVEsQ0FBQ2QsZUFBZSxJQUFJLElBQUk7TUFFM0VrRCxVQUFVLENBQUNoVCxHQUFHLEdBQUdwZixJQUFJLENBQUM0eUIsR0FBRyxDQUFDLEdBQUcsRUFBR25ELFdBQVcsR0FBSSxJQUFJLENBQUNPLFFBQVEsQ0FBQzVRLEdBQUcsR0FBRyxJQUFLLEdBQUl1VCxlQUFlLENBQUM7TUFFNUYsT0FBT1AsVUFBVTtJQUNuQjtFQUFDO0lBQUFsL0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksSUFBSSxDQUFDNDhCLE9BQU8sSUFBSSxJQUFJLENBQUNBLE9BQU8sQ0FBQzBDLE9BQU8sRUFBRTtRQUN4QyxJQUFJLENBQUMxQyxPQUFPLENBQUMwQyxPQUFPLENBQUMsQ0FBQztRQUV0QixJQUFJLENBQUMxQyxPQUFPLEdBQUcsSUFBSTtNQUNyQjtJQUNGO0VBQUM7RUFBQSxPQUFBTSxTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztBQ2hHSDtBQUNBO0FBQ0E7O0FBRU8sSUFBS3lCLGFBQWEsMEJBQWJBLGFBQWE7RUFBYkEsYUFBYSxDQUFiQSxhQUFhO0VBQWJBLGFBQWEsQ0FBYkEsYUFBYTtFQUFiQSxhQUFhLENBQWJBLGFBQWE7RUFBYkEsYUFBYSxDQUFiQSxhQUFhO0VBQUEsT0FBYkEsYUFBYTtBQUFBLE07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSnpCO0FBQ0E7QUFDQTs7QUFFeUI7QUFDK0M7QUFHSjtBQUNyQjtBQUNxQjtBQUNoQjtBQUNTO0FBQ0s7QUFDdEI7QUFFVztBQUVpQjtBQUdKO0FBRXBFLElBQU1ZLGdDQUFnQyxHQUFHLEdBQUc7QUFDNUMsSUFBTUMseUJBQXlCLEdBQUcsS0FBSztBQUFDLElBRW5CQyxjQUFjLDBCQUFBQyxzQkFBQTtFQU9qQyxTQUFBRCxlQUFZaEUsY0FBYyxFQUFFa0UscUJBQXFCLEVBQUVDLHNCQUFzQixFQUFFOU8sbUJBQXdDLEVBQUU7SUFBQTl4QiwySUFBQSxPQUFBeWdDLGNBQUE7SUFBQXhnQywySUFBQSxrQkFOakZzSSxxRUFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQztJQUFBdEksMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFBQUEsMklBQUE7SUFPM0UsSUFBSSxDQUFDMHFCLGVBQWUsR0FBRzhSLGNBQWM7SUFDckMsSUFBSSxDQUFDNVIsc0JBQXNCLEdBQUc4VixxQkFBcUI7SUFDbkQsSUFBSSxDQUFDNVYsdUJBQXVCLEdBQUc2VixzQkFBc0I7SUFDckQsSUFBSSxDQUFDL1csb0JBQW9CLEdBQUdpSSxtQkFBbUI7RUFDakQ7RUFBQ3B4Qix3SUFBQSxDQUFBKy9CLGNBQUE7SUFBQTkvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaXVCLE1BQU0zakIsR0FBRyxFQUFFbEIsS0FBSyxFQUFFdW1CLG1CQUFtQixFQUFFVCw2QkFBNkIsRUFBaUI7TUFBQSxJQUFBN3VCLEtBQUE7TUFDbkYsSUFBTW1hLHdCQUF3QixHQUFHLE9BQU8sSUFBSSxDQUFDMFAsdUJBQXVCLENBQUNSLHNCQUFzQixLQUFLLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQ1EsdUJBQXVCLENBQUNQLHNCQUFzQixLQUFLLFVBQVU7TUFFdkwsT0FBT2pTLE9BQU8sQ0FBQ3dCLEdBQUcsQ0FBQyxDQUNqQjhYLDRGQUE0QyxDQUFDMW1CLEdBQUcsQ0FBQyxFQUNqRHVQLHlGQUErQyxDQUFDLFVBQVUsRUFBRVcsd0JBQXdCLENBQUMsQ0FDbEYxRCxJQUFJLENBQUMsVUFBQU8sSUFBQSxFQUFrQztRQUFBLElBQWhDbUUsVUFBVSxHQUFBbkUsSUFBQSxDQUFWbUUsVUFBVTtVQUFFbkIsY0FBYyxHQUFBaEQsSUFBQSxDQUFkZ0QsY0FBYztRQUNoQ2hhLEtBQUksQ0FBQzJwQixzQkFBc0IsQ0FBQzNQLGNBQWMsQ0FBQ3JhLEtBQUssR0FBR3FhLGNBQWM7UUFFakUsT0FBTztVQUNMbUIsVUFBVSxFQUFWQSxVQUFVO1VBQ1ZuQixjQUFjLEVBQWRBO1FBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQyxDQUNMLENBQUMsQ0FDQ3ZELElBQUksQ0FBQyxVQUFBb2IsS0FBQSxFQUE4QztRQUFBLElBQUE4TixLQUFBLEdBQUFDLDBJQUFBLENBQUEvTixLQUFBO1VBQTVDMUYsUUFBUSxHQUFBd1QsS0FBQTtVQUFBRSxNQUFBLEdBQUFGLEtBQUE7VUFBR3hrQixVQUFVLEdBQUEwa0IsTUFBQSxDQUFWMWtCLFVBQVU7VUFBRW5CLGNBQWMsR0FBQTZsQixNQUFBLENBQWQ3bEIsY0FBYztRQUMzQ2hhLEtBQUksQ0FBQ3lwQixlQUFlLENBQUN1QixNQUFNLENBQUNyckIsS0FBSyxHQUFHLElBQUk7UUFDeENLLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxHQUFHd3NCLFFBQVE7UUFDOUNuc0IsS0FBSSxDQUFDd0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUwakIsUUFBUSxDQUFDaGdCLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNURuTSxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRzBTLFVBQVUsQ0FBQzJCLEdBQUcsQ0FBQztRQUVwRCxJQUFJMVgsd0ZBQXFDLElBQUksQ0FBQzRVLGNBQWMsQ0FBQzhsQix3QkFBd0IsSUFBSSxDQUFDOWxCLGNBQWMsQ0FBQytsQix3QkFBd0IsRUFBRTtVQUNqSS9sQixjQUFjLENBQUNtSixLQUFLLENBQUMsQ0FBQztVQUN0Qm5KLGNBQWMsQ0FBQ2xhLE9BQU8sQ0FBQyxDQUFDO1VBRXhCLElBQUl3SCx5RUFBbUMsSUFBSSxFQUFFbEMsNkVBQTBCLElBQUlrQyw4RUFBd0MsQ0FBQyxFQUFFO1lBQ3BIckMsd0ZBQThDLENBQUMsQ0FBQztVQUNsRDtVQUVBK1UsY0FBYyxHQUFHLElBQUk7VUFDckJtQixVQUFVLEdBQUcsSUFBSTtVQUNqQm5iLEtBQUksQ0FBQzJwQixzQkFBc0IsQ0FBQzNQLGNBQWMsQ0FBQ3JhLEtBQUssR0FBR3FhLGNBQWM7UUFDbkU7UUFFQSxPQUFPbVMsUUFBUSxDQUFDNUksU0FBUyxDQUFDeGEsS0FBSyxFQUFFb1MsVUFBVSxFQUFFbmIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3dDLFlBQVksQ0FBQ3RzQixLQUFLLENBQUM7TUFDdkYsQ0FBQyxDQUFDLENBQ0Q4VyxJQUFJLENBQUMsVUFBQXVwQixLQUFBLEVBQTRJO1FBQUEsSUFBMUkvb0IsTUFBTSxHQUFBK29CLEtBQUEsQ0FBTi9vQixNQUFNO1VBQUVvVixNQUFNLEdBQUEyVCxLQUFBLENBQU4zVCxNQUFNO1VBQUV1TixnQkFBZ0IsR0FBQW9HLEtBQUEsQ0FBaEJwRyxnQkFBZ0I7VUFBRWpDLDRCQUE0QixHQUFBcUksS0FBQSxDQUE1QnJJLDRCQUE0QjtVQUFFb0MsOEJBQThCLEdBQUFpRyxLQUFBLENBQTlCakcsOEJBQThCO1VBQUVELCtCQUErQixHQUFBa0csS0FBQSxDQUEvQmxHLCtCQUErQjtVQUFFbk8sR0FBRyxHQUFBcVUsS0FBQSxDQUFIclUsR0FBRztRQUMxSTNyQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssR0FBRzBzQixNQUFNO1FBQzFDcnNCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNrQyxHQUFHLENBQUNoc0IsS0FBSyxHQUFHZ3NCLEdBQUc7UUFFcEMzckIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ29KLDZDQUE2QyxDQUFDLENBQUM7UUFFcEU3eUIsS0FBSSxDQUFDd0ksT0FBTyxDQUFDb0csS0FBSyxDQUNoQixtREFBbUQsRUFDbkQ1TyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFDN0J1UCxNQUFNLEVBQ04yaUIsZ0JBQWdCLEVBQ2hCakMsNEJBQTRCLEVBQzVCb0MsOEJBQThCLEVBQzlCRCwrQkFDRixDQUFDO1FBRUQ5NUIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR0ssS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3FKLGlDQUFpQyxDQUFDN2IsTUFBTSxDQUFDO1FBRWpHalgsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ21KLFdBQVcsQ0FBQzNiLE1BQU0sQ0FBQztRQUV4QyxJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1VBQ25CO1FBQ0Y7UUFFQSxPQUFPalgsS0FBSSxDQUFDaWdDLHFCQUFxQixDQUFDamdDLEtBQUksQ0FBQzJwQixzQkFBc0IsQ0FBQzNQLGNBQWMsQ0FBQ3JhLEtBQUssRUFBRWk2QixnQkFBZ0IsQ0FBQyxDQUNsR25qQixJQUFJLENBQUMsVUFBQXVELGNBQWMsRUFBSTtVQUN0QixJQUFJa21CLHVCQUF1QjtVQUMzQixJQUFJQyxlQUFlLEdBQUcsS0FBSztVQUMzQixJQUFJekgsa0JBQWtCLEdBQUcsS0FBSztVQUM5QixJQUFNRCxVQUE2QixHQUFHLEVBQUU7VUFFeEMsSUFBSSxDQUFDejRCLEtBQUksQ0FBQzJwQixzQkFBc0IsQ0FBQzNQLGNBQWMsQ0FBQ3JhLEtBQUssRUFBRTtZQUNyREssS0FBSSxDQUFDMnBCLHNCQUFzQixDQUFDM1AsY0FBYyxDQUFDcmEsS0FBSyxHQUFHcWEsY0FBYztVQUNuRTtVQUVBQSxjQUFjLENBQUNnSixjQUFjLEdBQUcsVUFBQ3RaLENBQUMsRUFBVztZQUMzQyxJQUFJMUosS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEtBQUswc0IsTUFBTSxFQUFFO2NBQ2hEO1lBQ0Y7WUFFQSxJQUFJcnNCLEtBQUksQ0FBQzJwQixzQkFBc0IsQ0FBQzNQLGNBQWMsQ0FBQ3JhLEtBQUssS0FBS3FhLGNBQWMsRUFBRTtjQUN2RTtZQUNGO1lBRUEsSUFBSW1tQixlQUFlLEVBQUU7Y0FDbkI7WUFDRjtZQUVBLElBQUksQ0FBQzc0QixtRUFBNkIsRUFBRTtjQUNsQztZQUNGO1lBRUEsSUFBSW9DLENBQUMsQ0FBQzAyQixTQUFTLElBQUkxMkIsQ0FBQyxDQUFDMDJCLFNBQVMsQ0FBQ0EsU0FBUyxFQUFFO2NBQ3hDM0gsVUFBVSxDQUFDcHdCLElBQUksQ0FBQ3FCLENBQUMsQ0FBQzAyQixTQUFTLENBQUM7WUFDOUIsQ0FBQyxNQUFNO2NBQ0wxSCxrQkFBa0IsR0FBRyxJQUFJO1lBQzNCO1lBRUEsSUFBSSxDQUFDd0gsdUJBQXVCLEVBQUU7Y0FDNUJBLHVCQUF1QixHQUFHMTZCLFVBQVUsQ0FBQyxZQUFNO2dCQUN6QyxJQUFJeEYsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRDLE1BQU0sQ0FBQzFzQixLQUFLLEtBQUswc0IsTUFBTSxFQUFFO2tCQUNoRDtnQkFDRjtnQkFFQSxJQUFJOFQsZUFBZSxFQUFFO2tCQUNuQjtnQkFDRjtnQkFFQSxJQUFNcnJCLE9BQU8sR0FBRzlVLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDMDRCLGdCQUFnQixDQUFDaE0sTUFBTSxFQUFFb00sVUFBVSxFQUFFQyxrQkFBa0IsQ0FBQyxDQUN6R2ppQixJQUFJLENBQUMsVUFBQTRwQixLQUFBLEVBQXVCO2tCQUFBLElBQXJCcHBCLE1BQU0sR0FBQW9wQixLQUFBLENBQU5wcEIsTUFBTTtvQkFBRTJELE9BQU8sR0FBQXlsQixLQUFBLENBQVB6bEIsT0FBTztrQkFDckIsSUFBSTNELE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ25CalgsS0FBSSxDQUFDd0ksT0FBTyxDQUFDMkcsSUFBSSxDQUFDLG9EQUFvRCxFQUFFblAsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQUV1UCxNQUFNLENBQUM7b0JBRTlHO2tCQUNGO2tCQUVBLElBQUkyRCxPQUFPLENBQUNqWCxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlCdzhCLGVBQWUsR0FBRyxJQUFJO2tCQUN4QjtrQkFFQW5nQyxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFdVAsTUFBTSxFQUFFMkQsT0FBTyxDQUFDO2dCQUNsSSxDQUFDLENBQUMsQ0FDRDdELEtBQUssQ0FBQyxVQUFBck4sQ0FBQyxFQUFJO2tCQUNWMUosS0FBSSxDQUFDd0ksT0FBTyxDQUFDUyxLQUFLLENBQUMsbUNBQW1DLEVBQUVqSixLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFBRWdDLENBQUMsQ0FBQztnQkFDM0YsQ0FBQyxDQUFDO2NBQ04sQ0FBQyxFQUFFMjFCLGdDQUFnQyxDQUFDO1lBQ3RDO1VBQ0YsQ0FBQztVQUVEcmxCLGNBQWMsQ0FBQ2tKLDBCQUEwQixHQUFHLFlBQVk7WUFDdEQsSUFBSWxqQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDNEMsTUFBTSxDQUFDMXNCLEtBQUssS0FBSzBzQixNQUFNLEVBQUU7Y0FDaEQ7WUFDRjtZQUVBLElBQUlyc0IsS0FBSSxDQUFDMnBCLHNCQUFzQixDQUFDM1AsY0FBYyxDQUFDcmEsS0FBSyxLQUFLcWEsY0FBYyxFQUFFO2NBQ3ZFO1lBQ0Y7WUFFQSxJQUFNc21CLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBQSxFQUFlO2NBQ2hDO2NBQ0E7Y0FDQXRnQyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLDRFQUE0QjtjQUUvRCxJQUFJbnRCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLEVBQUU7Z0JBQzNDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDa3VCLEtBQUssQ0FBQyxDQUFDO2dCQUMvQzd0QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDbXVCLFNBQVMsR0FBRyxJQUFJO2NBQzFEO2NBRUE5dEIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzJCLE9BQU8sQ0FBQ3pyQixLQUFLLEdBQUcsS0FBSztjQUMxQ0ssS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQ3ZyQixLQUFLLEdBQUcsSUFBSTtjQUV6QyxJQUFNbVYsT0FBTyxHQUFHOVUsS0FBSSxDQUFDMm9CLG9CQUFvQixDQUFDLENBQUMsQ0FDeEM1UixLQUFLLENBQUMsVUFBQXJOLENBQUMsRUFBSTtnQkFDVjFKLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ1MsS0FBSyxDQUNoQixtRkFBbUYsRUFDbkZqSixLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFDN0JzUyxjQUFjLENBQUN1SCxrQkFBa0IsRUFDakM3WCxDQUNGLENBQUM7Y0FDSCxDQUFDLENBQUM7WUFDTixDQUFDO1lBRUQsUUFBUXNRLGNBQWMsQ0FBQ3VILGtCQUFrQjtjQUN2QyxLQUFLLFVBQVU7Y0FDZixLQUFLLFdBQVc7Y0FDaEIsS0FBSyxXQUFXO2NBQ2hCLEtBQUssS0FBSztnQkFDUjtjQUVGLEtBQUssY0FBYztjQUNuQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSWxmLFNBQVMsQ0FBQ2srQixNQUFNLEVBQUU7a0JBQ3BCdmdDLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdFQUFnRSxFQUFFekksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQUVzUyxjQUFjLENBQUN1SCxrQkFBa0IsQ0FBQztrQkFDckp2aEIsS0FBSSxDQUFDd2dDLHVCQUF1QixDQUFDeG1CLGNBQWMsRUFBRXNtQixhQUFhLENBQUM7Z0JBQzdEO2dCQUVBO2NBQ0YsS0FBSyxRQUFRO2dCQUNYdGdDLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdFQUFnRSxFQUFFekksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQUVzUyxjQUFjLENBQUN1SCxrQkFBa0IsQ0FBQztnQkFFckorZSxhQUFhLENBQUMsQ0FBQztnQkFFZjtjQUNGO2dCQUNFdnpCLGlFQUFpQixDQUFDaU4sY0FBYyxDQUFDdUgsa0JBQWtCLENBQUM7WUFDeEQ7VUFDRixDQUFDO1VBRUQsSUFBTWtmLGtCQUFrQixHQUFHLElBQUlwcEIsT0FBTyxDQUFjLFVBQUMwQixPQUFPLEVBQUVDLE1BQU0sRUFBSztZQUN2RSxJQUFJLENBQUM1VCxvRkFBaUMsRUFBRTtjQUN0QyxJQUFNMnJCLFVBQVMsR0FBR3ZyQixVQUFVLENBQUM7Z0JBQUEsT0FBTXdULE1BQU0sQ0FBQyxJQUFJOVQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Y0FBQSxHQUFFbzZCLHlCQUF5QixDQUFDO2NBRTFHdGxCLGNBQWMsQ0FBQzhJLE9BQU8sR0FBRyxVQUFDcFosQ0FBQyxFQUFXO2dCQUNwQzZULFlBQVksQ0FBQ3dULFVBQVMsQ0FBQztnQkFDdkJoWSxPQUFPLENBQUNyUCxDQUFDLENBQUNnM0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3ZCLENBQUM7Y0FFRDtZQUNGO1lBRUEsSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJajNCLENBQUMsRUFBVztjQUNqQztjQUNBNlQsWUFBWSxDQUFDd1QsU0FBUyxDQUFDO2NBQ3ZCL1csY0FBYyxDQUFDblosbUJBQW1CLENBQUMsT0FBTyxFQUFFOC9CLGFBQWEsQ0FBQztjQUMxRDNtQixjQUFjLENBQUNuWixtQkFBbUIsQ0FBQyxXQUFXLEVBQUU4L0IsYUFBYSxDQUFDO2NBRTlELElBQUlqM0IsQ0FBQyxDQUFDZzNCLE9BQU8sRUFBRTtnQkFDYjNuQixPQUFPLENBQUNyUCxDQUFDLENBQUNnM0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3ZCLENBQUMsTUFBTTtnQkFDTDNuQixPQUFPLENBQUNyUCxDQUFDLENBQUMyaUIsTUFBTSxDQUFDO2NBQ25CO1lBQ0YsQ0FBQztZQUVELElBQU0wRSxTQUFTLEdBQUd2ckIsVUFBVSxDQUFDLFlBQU07Y0FDakN3VSxjQUFjLENBQUNuWixtQkFBbUIsQ0FBQyxPQUFPLEVBQUU4L0IsYUFBYSxDQUFDO2NBQzFEM21CLGNBQWMsQ0FBQ25aLG1CQUFtQixDQUFDLFdBQVcsRUFBRTgvQixhQUFhLENBQUM7Y0FDOUQzbkIsTUFBTSxDQUFDLElBQUk5VCxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUM3QyxDQUFDLEVBQUVvNkIseUJBQXlCLENBQUM7WUFFN0J0bEIsY0FBYyxDQUFDdFosZ0JBQWdCLENBQUMsT0FBTyxFQUFFaWdDLGFBQWEsQ0FBQztZQUN2RDNtQixjQUFjLENBQUN0WixnQkFBZ0IsQ0FBQyxXQUFXLEVBQUVpZ0MsYUFBYSxDQUFDO1lBRTNEO1VBQ0YsQ0FBQyxDQUFDO1VBRUYsT0FBTyxJQUFJdHBCLE9BQU8sQ0FBTyxVQUFBMEIsT0FBTyxFQUFJO1lBQ2xDQSxPQUFPLENBQUMsQ0FBQztVQUNYLENBQUMsQ0FBQyxDQUFDdEMsSUFBSSxDQUFDLFlBQU07WUFDWixJQUFJLENBQUNraEIsNEJBQTRCLEVBQUU7Y0FDakM7WUFDRjtZQUVBMzNCLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLCtCQUErQixFQUFFekksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQUVpd0IsNEJBQTRCLENBQUNiLGtCQUFrQixDQUFDaGEsR0FBRyxDQUFDO1lBRXRJLE9BQU85QyxjQUFjLENBQUM0SCxtQkFBbUIsQ0FBQytWLDRCQUE0QixDQUFDYixrQkFBa0IsQ0FBQyxDQUN2Ri9mLEtBQUssQ0FBQyxVQUFBck4sQ0FBQyxFQUFJO2NBQ1YxSixLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFaXdCLDRCQUE0QixDQUFDYixrQkFBa0IsRUFBRXB0QixDQUFDLENBQUNrRSxPQUFPLENBQUM7Y0FFM0ssTUFBTWxFLENBQUM7WUFDVCxDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQytNLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDcWpCLCtCQUErQixFQUFFO2NBQ3BDO1lBQ0Y7WUFFQTk1QixLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFb3lCLCtCQUErQixDQUFDaEQsa0JBQWtCLENBQUNoYSxHQUFHLENBQUM7WUFFM0ksT0FBTzlDLGNBQWMsQ0FBQ2dJLG9CQUFvQixDQUFDOFgsK0JBQStCLENBQUNoRCxrQkFBa0IsQ0FBQyxDQUMzRi9mLEtBQUssQ0FBQyxVQUFBck4sQ0FBQyxFQUFJO2NBQ1YxSixLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyw4REFBOEQsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFb3lCLCtCQUErQixDQUFDaEQsa0JBQWtCLEVBQUVwdEIsQ0FBQyxDQUFDa0UsT0FBTyxDQUFDO2NBRS9LLE1BQU1sRSxDQUFDO1lBQ1QsQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDLENBQUMrTSxJQUFJLENBQUMsWUFBTTtZQUNaLElBQUksQ0FBQ3NqQiw4QkFBOEIsRUFBRTtjQUNuQztZQUNGO1lBRUEvNUIsS0FBSSxDQUFDd0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUV6SSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFBRXF5Qiw4QkFBOEIsQ0FBQ2pELGtCQUFrQixDQUFDaGEsR0FBRyxDQUFDO1lBRXpJLE9BQU85QyxjQUFjLENBQUNnSSxvQkFBb0IsQ0FBQytYLDhCQUE4QixDQUFDakQsa0JBQWtCLENBQUMsQ0FDMUYvZixLQUFLLENBQUMsVUFBQXJOLENBQUMsRUFBSTtjQUNWMUosS0FBSSxDQUFDd0ksT0FBTyxDQUFDQyxJQUFJLENBQUMsOERBQThELEVBQUV6SSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFBRXF5Qiw4QkFBOEIsQ0FBQ2pELGtCQUFrQixFQUFFcHRCLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQztjQUU5SyxNQUFNbEUsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUNEK00sSUFBSSxDQUFDLFlBQU07Y0FDVixPQUFPdUQsY0FBYyxDQUFDMEgsWUFBWSxDQUFDO2dCQUNqQ3RHLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCQyxtQkFBbUIsRUFBRTtjQUN2QixDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQzVFLElBQUksQ0FBQyxVQUFBbXFCLE1BQU0sRUFBSTtjQUNoQjVnQyxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFazVCLE1BQU0sQ0FBQztjQUUxRixPQUFPNWdDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDcWlCLG9CQUFvQixDQUFDcUssTUFBTSxFQUFFdVUsTUFBTSxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDbnFCLElBQUksQ0FBQyxVQUFBb3FCLEtBQUEsRUFBa0M7Y0FBQSxJQUFoQzVwQixNQUFNLEdBQUE0cEIsS0FBQSxDQUFONXBCLE1BQU07Z0JBQUU2ZixrQkFBa0IsR0FBQStKLEtBQUEsQ0FBbEIvSixrQkFBa0I7Y0FDbEM5MkIsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR0ssS0FBSSxDQUFDOGdDLDRDQUE0QyxDQUFDN3BCLE1BQU0sQ0FBQztjQUU1RixJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO2dCQUNuQmpYLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyQixPQUFPLENBQUN6ckIsS0FBSyxHQUFHLEtBQUs7Z0JBQzFDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDNkIsT0FBTyxDQUFDM3JCLEtBQUssR0FBRyxJQUFJO2dCQUN6Q0ssS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQytCLE9BQU8sQ0FBQzdyQixLQUFLLEdBQUcsS0FBSztnQkFFMUM7Y0FDRjtjQUVBLE9BQU9xYSxjQUFjLENBQUM0SCxtQkFBbUIsQ0FBQ2tWLGtCQUFrQixDQUFDLENBQzFEL2YsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7Z0JBQ1YxSixLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRXpJLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUFFb3ZCLGtCQUFrQixFQUFFcHRCLENBQUMsQ0FBQ2tFLE9BQU8sQ0FBQztnQkFFOUksTUFBTWxFLENBQUM7Y0FDVCxDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQytNLElBQUksQ0FBQyxZQUFNO1lBQ1o2WSxtQkFBbUIsQ0FBQzduQixPQUFPLENBQUN6SCxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsQ0FBQztZQUUxRCxPQUFPKzRCLGtCQUFrQjtVQUMzQixDQUFDLENBQUMsQ0FBQ2hxQixJQUFJLENBQUMsVUFBQTBGLFdBQVcsRUFBSTtZQUNyQixJQUFJbmMsS0FBSSxDQUFDNnBCLHVCQUF1QixDQUFDWCwyQkFBMkIsQ0FBQ3ZwQixLQUFLLEVBQUU7Y0FDbEVvaEMsd0dBQWtELENBQUM1a0IsV0FBVyxFQUFFbkMsY0FBYyxDQUFDd0ksWUFBWSxDQUFDLENBQUMsRUFBRXhpQixLQUFJLENBQUM2cEIsdUJBQXVCLENBQUNSLHNCQUFzQixFQUFFcnBCLEtBQUksQ0FBQzZwQix1QkFBdUIsQ0FBQ1Asc0JBQXNCLENBQUM7WUFDMU07WUFFQSxJQUFJdHBCLEtBQUksQ0FBQzZwQix1QkFBdUIsQ0FBQ1osb0JBQW9CLENBQUN0cEIsS0FBSyxFQUFFO2NBQzNELElBQUFxaEMscUJBQUEsR0FBeUNELDJHQUFxRCxDQUFDNWtCLFdBQVcsRUFBRW5jLEtBQUksQ0FBQzZwQix1QkFBdUIsQ0FBQ1YsNEJBQTRCLEVBQUVucEIsS0FBSSxDQUFDNnBCLHVCQUF1QixDQUFDVCw0QkFBNEIsQ0FBQztnQkFBMU42WCxpQkFBaUIsR0FBQUQscUJBQUEsQ0FBakJDLGlCQUFpQjtnQkFBRTdTLFdBQVcsR0FBQTRTLHFCQUFBLENBQVg1UyxXQUFXO2NBRXJDQSxXQUFXLENBQUNsaUIsT0FBTyxDQUFDLFVBQUFKLFVBQVU7Z0JBQUEsT0FBSTlMLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyRSxXQUFXLENBQUN6dEIsR0FBRyxDQUFDbUwsVUFBVSxDQUFDO2NBQUEsRUFBQztjQUNuRnFRLFdBQVcsR0FBRzhrQixpQkFBaUI7WUFDakM7WUFFQWpoQyxLQUFJLENBQUMycEIsc0JBQXNCLENBQUN4TixXQUFXLENBQUN4YyxLQUFLLEdBQUd3YyxXQUFXO1lBRTNELElBQU0ra0Isb0JBQW9CLEdBQUcsSUFBSWxsQiwrREFBb0IsQ0FBQ2hDLGNBQWMsRUFBRW1DLFdBQVcsRUFBRW5jLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMwQyxRQUFRLENBQUN4c0IsS0FBSyxDQUFDb2UsYUFBYSxHQUFHLENBQUMsQ0FBQztZQUV6SS9kLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyRSxXQUFXLENBQUN6dEIsR0FBRyxDQUFDdWdDLG9CQUFvQixDQUFDO1lBRTFELElBQU1wc0IsT0FBTyxHQUFHb3NCLG9CQUFvQixDQUFDQyxZQUFZLENBQUM1ZCxTQUFTLENBQUMsVUFBQW9iLFVBQVUsRUFBSTtjQUN4RTMrQixLQUFJLENBQUN5cEIsZUFBZSxDQUFDM0wsYUFBYSxDQUFDbmUsS0FBSyxHQUFHZy9CLFVBQVU7Y0FFckQsSUFBSSxDQUFDMytCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyWCxpQkFBaUIsSUFBSSxDQUFDcGhDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUM0WCxpQkFBaUIsRUFBRTtnQkFDdEZyaEMsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRYLGlCQUFpQixHQUFHMUMsVUFBVSxDQUFDMkMsS0FBSztnQkFDekR0aEMsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzJYLGlCQUFpQixHQUFHekMsVUFBVSxDQUFDcGYsS0FBSztnQkFFekQ7Y0FDRjtjQUVBLElBQUlnaUIsZ0JBQWdCLEdBQUcsS0FBSztjQUM1QixJQUFJQyxnQkFBZ0IsR0FBRyxLQUFLO2NBRTVCLElBQUk3QyxVQUFVLENBQUMyQyxLQUFLLEVBQUU7Z0JBQ3BCLElBQUl0aEMsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRYLGlCQUFpQixJQUFJcmhDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUM0WCxpQkFBaUIsQ0FBQzNzQixTQUFTLEtBQUtpcUIsVUFBVSxDQUFDMkMsS0FBSyxDQUFDNXNCLFNBQVMsRUFBRTtrQkFDN0g2c0IsZ0JBQWdCLEdBQUd2aEMsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRYLGlCQUFpQixJQUFJcmhDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUM0WCxpQkFBaUIsQ0FBQ3hpQixhQUFhLEtBQUs4ZixVQUFVLENBQUMyQyxLQUFLLENBQUN6aUIsYUFBYTtrQkFFcEosSUFBSTBpQixnQkFBZ0IsSUFBSWwvQixTQUFTLENBQUNrK0IsTUFBTSxFQUFFO29CQUN4Q3ZnQyxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FDZiwwR0FBMEcsRUFDMUd6SSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDL2hCLFFBQVEsRUFDN0JpM0IsVUFBVSxDQUFDMkMsS0FBSyxDQUFDemlCLGFBQWEsRUFDOUI3ZSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDNFgsaUJBQWlCLENBQUN4aUIsYUFBYSxFQUNwRCxJQUFJblcsb0RBQVMsQ0FBQ2kyQixVQUFVLENBQUMyQyxLQUFLLENBQUM1c0IsU0FBUyxHQUFHMVUsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzRYLGlCQUFpQixDQUFDM3NCLFNBQVMsQ0FBQyxDQUFDL0wsV0FBVyxDQUFDLENBQzNHLENBQUM7a0JBQ0g7a0JBRUEzSSxLQUFJLENBQUN5cEIsZUFBZSxDQUFDNFgsaUJBQWlCLEdBQUcxQyxVQUFVLENBQUMyQyxLQUFLO2dCQUMzRDtjQUNGO2NBRUEsSUFBSTNDLFVBQVUsQ0FBQ3BmLEtBQUssRUFBRTtnQkFDcEIsSUFBSXZmLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyWCxpQkFBaUIsSUFBSXBoQyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDMlgsaUJBQWlCLENBQUMxc0IsU0FBUyxLQUFLaXFCLFVBQVUsQ0FBQ3BmLEtBQUssQ0FBQzdLLFNBQVMsRUFBRTtrQkFDN0g4c0IsZ0JBQWdCLEdBQUd4aEMsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzJYLGlCQUFpQixJQUFJcGhDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyWCxpQkFBaUIsQ0FBQ3ZpQixhQUFhLEtBQUs4ZixVQUFVLENBQUNwZixLQUFLLENBQUNWLGFBQWE7a0JBRXBKLElBQUkyaUIsZ0JBQWdCLElBQUluL0IsU0FBUyxDQUFDaytCLE1BQU0sRUFBRTtvQkFDeEN2Z0MsS0FBSSxDQUFDd0ksT0FBTyxDQUFDQyxJQUFJLENBQ2YsMEdBQTBHLEVBQzFHekksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQy9oQixRQUFRLEVBQzdCaTNCLFVBQVUsQ0FBQ3BmLEtBQUssQ0FBQ1YsYUFBYSxFQUM5QjdlLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyWCxpQkFBaUIsQ0FBQ3ZpQixhQUFhLEVBQ3BELElBQUluVyxvREFBUyxDQUFDaTJCLFVBQVUsQ0FBQ3BmLEtBQUssQ0FBQzdLLFNBQVMsR0FBRzFVLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMyWCxpQkFBaUIsQ0FBQzFzQixTQUFTLENBQUMsQ0FBQy9MLFdBQVcsQ0FBQyxDQUMzRyxDQUFDO2tCQUNIO2tCQUVBM0ksS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQzJYLGlCQUFpQixHQUFHekMsVUFBVSxDQUFDcGYsS0FBSztnQkFDM0Q7Y0FDRjtjQUVBLElBQUksQ0FBQ2lpQixnQkFBZ0IsSUFBSUQsZ0JBQWdCLEtBQUtsL0IsU0FBUyxDQUFDaytCLE1BQU0sRUFBRTtnQkFDOUQsSUFBTUQsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFBLEVBQWU7a0JBQ2hDdGdDLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNhLEtBQUssQ0FBQzNxQixLQUFLLEdBQUd3dEIsNEVBQTRCO2tCQUUvRCxJQUFJbnRCLEtBQUksQ0FBQ3lwQixlQUFlLENBQUNaLFlBQVksQ0FBQ2xwQixLQUFLLEVBQUU7b0JBQzNDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDa3VCLEtBQUssQ0FBQyxDQUFDO29CQUMvQzd0QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDWixZQUFZLENBQUNscEIsS0FBSyxDQUFDbXVCLFNBQVMsR0FBRyxJQUFJO2tCQUMxRDtrQkFFQTl0QixLQUFJLENBQUN5cEIsZUFBZSxDQUFDMkIsT0FBTyxDQUFDenJCLEtBQUssR0FBRyxLQUFLO2tCQUMxQ0ssS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQ3ZyQixLQUFLLEdBQUcsSUFBSTtrQkFFekN1aEMsb0JBQW9CLENBQUNwaEMsT0FBTyxDQUFDLENBQUM7a0JBRTlCLElBQU1nVixPQUFPLEdBQUc5VSxLQUFJLENBQUMyb0Isb0JBQW9CLENBQUMsQ0FBQyxDQUN4QzVSLEtBQUssQ0FBQyxVQUFBck4sQ0FBQyxFQUFJO29CQUNWMUosS0FBSSxDQUFDd0ksT0FBTyxDQUFDUyxLQUFLLENBQ2hCLHlFQUF5RSxFQUN6RWpKLEtBQUksQ0FBQ3lwQixlQUFlLENBQUMvaEIsUUFBUSxFQUM3QnNTLGNBQWMsQ0FBQ3VILGtCQUFrQixFQUNqQzdYLENBQ0YsQ0FBQztrQkFDSCxDQUFDLENBQUM7Z0JBQ04sQ0FBQztnQkFFRDFKLEtBQUksQ0FBQ3dnQyx1QkFBdUIsQ0FBQ3htQixjQUFjLEVBQUVzbUIsYUFBYSxDQUFDO2NBQzdELENBQUMsTUFBTTtnQkFDTHRnQyxLQUFJLENBQUMycEIsc0JBQXNCLENBQUNtSSwrQkFBK0IsR0FBRyxDQUFDO2NBQ2pFO1lBQ0YsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDeHFCLHNFQUFnQyxFQUFFO2NBQ3JDdEgsS0FBSSxDQUFDeXBCLGVBQWUsQ0FBQ2UsU0FBUyxDQUFDN3FCLEtBQUssR0FBRyxLQUFLO2NBQzVDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDaUIsVUFBVSxDQUFDL3FCLEtBQUssR0FBRyxJQUFJO2NBQzVDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDeUIsT0FBTyxDQUFDdnJCLEtBQUssR0FBRyxLQUFLO2NBQzFDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDMkIsT0FBTyxDQUFDenJCLEtBQUssR0FBRyxLQUFLO2NBQzFDSyxLQUFJLENBQUN5cEIsZUFBZSxDQUFDYSxLQUFLLENBQUMzcUIsS0FBSyxHQUFHd3RCLG1FQUFtQjtjQUV0RDtZQUNGO1lBRUEsT0FBTzBCLDZCQUE2QixDQUFDMVMsV0FBVyxDQUFDO1VBQ25ELENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNOO0VBQUM7SUFBQTFjLEdBQUE7SUFBQUUsS0FBQSxXQUFBc2dDLHNCQUFBanJCLEVBQUEsRUFBQTJNLEdBQUE7TUFBQSxRQUFBNmQsc0JBQUEsR0FBQUEsc0JBQUEsSUFBQXZxQiw2SUFBQSxlQUFBQywySUFBQSxDQUVELFNBQUFDLFFBQ0Vzc0Isc0JBQThDLEVBQzlDN0gsZ0JBQWtDO1FBQUEsSUFBQThILG1CQUFBO1FBQUEsT0FBQXhzQiwySUFBQSxVQUFBSSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLElBQzdCZ3NCLHNCQUFzQjtnQkFBQWxzQixRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUN6Qm1rQixnQkFBZ0IsR0FBR25lLHFGQUEwQyxDQUFDbWUsZ0JBQWdCLENBQUM7Y0FBQyxPQUFBcmtCLFFBQUEsQ0FBQVMsTUFBQSxXQUV6RTFPLDBGQUFvRCxDQUFDc3lCLGdCQUFnQixDQUFDO1lBQUE7Y0FHekU4SCxtQkFBbUIsR0FBQXpFLGFBQUEsQ0FBQUEsYUFBQSxLQUNwQndFLHNCQUFzQixDQUFDamdCLGdCQUFnQixDQUFDLENBQUMsR0FDekNvWSxnQkFBZ0I7Y0FHckI2SCxzQkFBc0IsQ0FBQ2hnQixnQkFBZ0IsQ0FBQ2lnQixtQkFBbUIsQ0FBQztjQUFDLE9BQUFuc0IsUUFBQSxDQUFBUyxNQUFBLFdBRXREeXJCLHNCQUFzQjtZQUFBO1lBQUE7Y0FBQSxPQUFBbHNCLFFBQUEsQ0FBQVcsSUFBQTtVQUFBO1FBQUEsR0FBQWYsT0FBQTtNQUFBLENBQzlCLElBQUFnQixLQUFBLE9BQUExSCxTQUFBO0lBQUE7RUFBQTtJQUFBaFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQTZnQyx3QkFBZ0N4bUIsY0FBK0IsRUFBRXNtQixhQUF5QixFQUFRO01BQUEsSUFBQXQvQixNQUFBO01BQ2hHLElBQUlnWixjQUFjLENBQUN1SCxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7UUFDbEQ7TUFDRjtNQUVBLElBQUksQ0FBQ2tJLGVBQWUsQ0FBQ2EsS0FBSyxDQUFDM3FCLEtBQUssR0FBR3d0Qix5RUFBeUI7TUFFNUQsSUFBSSxJQUFJLENBQUN4RCxzQkFBc0IsQ0FBQ21JLCtCQUErQixHQUFHeHFCLHdGQUFrRCxJQUFJLENBQUNBLDhFQUF3QyxFQUFFO1FBQUEsSUFBQXE2QixxQkFBQTtRQUNqSyxJQUFJLENBQUNoWSxzQkFBc0IsQ0FBQ21JLCtCQUErQixFQUFFO1FBRTdELElBQU04UCxpQkFBaUIsR0FBRyxFQUFBRCxxQkFBQSxHQUFBM25CLGNBQWMsQ0FBQ3FILHVCQUF1QixjQUFBc2dCLHFCQUFBLHVCQUF0Q0EscUJBQUEsQ0FBd0M1NkIsSUFBSSxNQUFLLE9BQU87UUFFbEYsSUFBSTNCLHdGQUFxQyxJQUN2QyxDQUFDNFUsY0FBYyxDQUFDOGxCLHdCQUF3QixJQUN4QyxDQUFDOWxCLGNBQWMsQ0FBQytsQix3QkFBd0IsSUFDeEMsQ0FBQzZCLGlCQUFpQixFQUNsQjtVQUNBO1FBQ0Y7UUFFQSxJQUFJLENBQUNwNUIsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELENBQUM7UUFFbkUsSUFBTTRZLHVCQUF1QixHQUFHckgsY0FBYyxDQUFDcUgsdUJBQXVCO1FBQ3RFLElBQU12TSxPQUFPLEdBQUdrRixjQUFjLENBQUNpQixXQUFXLENBQUM7VUFBQzRtQixVQUFVLEVBQUU7UUFBSSxDQUFDLENBQUMsQ0FBQ3ByQixJQUFJLENBQUMsVUFBQXFyQixLQUFLLEVBQUk7VUFDM0UsT0FBTzluQixjQUFjLENBQUM0SCxtQkFBbUIsQ0FBQ2tnQixLQUFLLENBQUMsQ0FBQ3JyQixJQUFJLENBQUMsWUFBTTtZQUMxRCxPQUFPdUQsY0FBYyxDQUFDNEgsbUJBQW1CLENBQUNQLHVCQUF1QixDQUFDO1VBQ3BFLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNDdEssS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7VUFDVjFJLE1BQUksQ0FBQ3dILE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFDQUFxQyxFQUFFUyxDQUFDLENBQUM7VUFDNUQxSSxNQUFJLENBQUMyb0Isc0JBQXNCLENBQUNtSSwrQkFBK0IsR0FBRyxDQUFDO1VBQy9Ed08sYUFBYSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUo7TUFDRjtNQUVBLElBQUksQ0FBQzkzQixPQUFPLENBQUNDLElBQUksQ0FBQyxtRkFBbUYsRUFBRSxJQUFJLENBQUNraEIsc0JBQXNCLENBQUNtSSwrQkFBK0IsQ0FBQztNQUNuSyxJQUFJLENBQUNuSSxzQkFBc0IsQ0FBQ21JLCtCQUErQixHQUFHLENBQUM7TUFDL0R3TyxhQUFhLENBQUMsQ0FBQztJQUNqQjtFQUFDO0lBQUE3Z0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1oQyw2Q0FBcUQ3cEIsTUFBa0MsRUFBZ0I7TUFDckcsUUFBUUEsTUFBTTtRQUNaLEtBQUssSUFBSTtVQUNQLE9BQU9rVyxxRUFBcUI7UUFDOUIsS0FBSyxjQUFjO1VBQ2pCLE9BQU9BLHlFQUF5QjtRQUNsQyxLQUFLLFdBQVc7UUFDaEIsS0FBSyxVQUFVO1FBQ2YsS0FBSyxjQUFjO1FBQ25CLEtBQUssU0FBUztVQUNaLE9BQU9BLHVFQUF1QjtRQUNoQyxLQUFLLFFBQVE7VUFDWCxPQUFPQSxrRUFBa0I7UUFDM0I7VUFDRXBnQixpRUFBaUIsQ0FBQ2tLLE1BQU0sQ0FBQztNQUM3QjtJQUNGO0VBQUM7RUFBQSxPQUFBc29CLGNBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1Z0JIO0FBQ0E7QUFDQTs7QUFFdUQ7QUFDSDtBQUVOO0FBQUEsSUErQnpCbEMsV0FBVztFQVM5QixTQUFBQSxZQUFZeFUsWUFBOEIsRUFBRXJVLElBQVksRUFBRTlNLFFBQWdCLEVBQUU0MUIsV0FBbUIsRUFBRTFpQixPQUFnQyxFQUFFO0lBQUE5YiwySUFBQSxPQUFBdStCLFdBQUE7SUFBQXQrQiwySUFBQSxrQkFSL0ZzSSxvRUFBdUIsQ0FBQyxhQUFhLENBQUM7SUFBQXRJLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBU3hFLElBQUksQ0FBQ3crQixhQUFhLEdBQUcxVSxZQUFZO0lBQ2pDLElBQUksQ0FBQzJVLEtBQUssR0FBR2hwQixJQUFJO0lBQ2pCLElBQUksQ0FBQ2lwQixTQUFTLEdBQUcvMUIsUUFBUTtJQUN6QixJQUFJLENBQUNnMkIsWUFBWSxHQUFHQyxTQUFTLENBQUNMLFdBQVcsQ0FBQyxDQUFDTSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUNqRSxJQUFJLENBQUNyQixRQUFRLEdBQUczaEIsT0FBTztFQUN6QjtFQUFDcGIsd0lBQUEsQ0FBQTY5QixXQUFBO0lBQUE1OUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWl1QixNQUFBLEVBQWM7TUFDWixJQUFJOE4scUVBQXNCLEVBQUU7UUFDMUIsSUFBTXFHLGFBQTJCLEdBQUc7VUFDbENDLEdBQUcsRUFBRTtZQUFDQyx3QkFBd0IsRUFBRTtVQUFPLENBQUM7VUFDeENDLFFBQVEsRUFBRTtZQUFDQyxlQUFlLEVBQUU7Y0FBQzdOLE9BQU8sRUFBRTtZQUFLO1VBQUMsQ0FBQztVQUM3QzhOLFNBQVMsRUFBRTtZQUNUQyxlQUFlLEVBQUUsQ0FBQztZQUNsQkMsYUFBYSxFQUFFLEVBQUU7WUFDakJDLFlBQVksRUFBRSxFQUFFO1lBQ2hCSixlQUFlLEVBQUU7Y0FDZjdOLE9BQU8sRUFBRSxLQUFLO2NBQ2RrTyxXQUFXLEVBQUUsRUFBRTtjQUNmQyxhQUFhLEVBQUU7WUFDakI7VUFDRjtRQUNGLENBQUM7UUFFRCxJQUFJLENBQUMvRixPQUFPLEdBQUcsSUFBSWhCLDRFQUE2QixDQUFDLElBQUksQ0FBQzZCLGFBQWEsQ0FBQztRQUNwRSxJQUFJLENBQUNtRixVQUFVLENBQUNYLGFBQWEsQ0FBQztRQUU5QjtNQUNGO0lBQ0Y7RUFBQztJQUFBdGlDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpZSxTQUFBLEVBQXVDO01BQ3JDLElBQUksQ0FBQyxJQUFJLENBQUM4ZSxPQUFPLEVBQUU7UUFDakIsT0FBTztVQUNMM08sS0FBSyxFQUFFLENBQUM7VUFDUkUsTUFBTSxFQUFFLENBQUM7VUFDVCtOLFdBQVcsRUFBRSxDQUFDO1VBQ2RyUSxHQUFHLEVBQUUsQ0FBQztVQUNONlMsWUFBWSxFQUFFQyx5RUFBNkJDO1FBQzdDLENBQUM7TUFDSDtNQUVBLElBQU1DLFVBQVUsR0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUNYLElBQUksQ0FBQ1AsT0FBTyxDQUFDOWUsUUFBUSxDQUFDLENBQUM7UUFDMUJvZSxXQUFXLEVBQUUsQ0FBQztRQUNkclEsR0FBRyxFQUFFO01BQUMsRUFDUDtNQUNELElBQU1xUSxXQUFXLEdBQUcsSUFBSSxDQUFDdUIsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7TUFDMUQsSUFBTTJCLGVBQWUsR0FBRyxDQUFDamdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUNxOUIsUUFBUSxDQUFDZCxlQUFlLElBQUksSUFBSTtNQUMzRSxJQUFNOVAsR0FBRyxHQUFHcGYsSUFBSSxDQUFDNHlCLEdBQUcsQ0FBQyxHQUFHLEVBQUVELGVBQWUsR0FBR2xELFdBQVcsQ0FBQztNQUV4RCxJQUFJLElBQUksQ0FBQ3VCLGFBQWEsRUFBRTtRQUN0Qm9CLFVBQVUsQ0FBQzNDLFdBQVcsR0FBR0EsV0FBVztRQUNwQzJDLFVBQVUsQ0FBQ2hULEdBQUcsR0FBR0EsR0FBRztRQUVwQixJQUFJLElBQUksQ0FBQzRSLGFBQWEsQ0FBQ3dCLFFBQVEsSUFBSSxJQUFJLENBQUN4QixhQUFhLENBQUN3QixRQUFRLENBQUN6MUIsTUFBTSxFQUFFO1VBQ3JFcTFCLFVBQVUsQ0FBQzFDLFlBQVksR0FBRyxJQUFJLENBQUNzQixhQUFhLENBQUN3QixRQUFRLENBQUNDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUQ7TUFDRjtNQUVBLElBQUlMLFVBQVUsQ0FBQ2dFLGtCQUFrQixHQUFHLENBQUMsRUFBRTtRQUNyQ2hFLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyx3RUFBNEI7TUFDeEQsQ0FBQyxNQUFNLElBQUlFLFVBQVUsQ0FBQ2lFLFFBQVEsR0FBRyxDQUFDLEVBQUU7UUFDbENqRSxVQUFVLENBQUNILFlBQVksR0FBR0MscUVBQXlCO01BQ3JELENBQUMsTUFBTSxJQUFJRSxVQUFVLENBQUNwZixLQUFLLEVBQUU7UUFDM0JvZixVQUFVLENBQUNILFlBQVksR0FBR0Msc0VBQTBCO01BQ3RELENBQUMsTUFBTTtRQUNMRSxVQUFVLENBQUNILFlBQVksR0FBR0MseUVBQTZCO01BQ3pEO01BRUEsT0FBT0UsVUFBVTtJQUNuQjtFQUFDO0lBQUFsL0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsUUFBQSxFQUFnQjtNQUNkLElBQUksSUFBSSxDQUFDNDhCLE9BQU8sRUFBRTtRQUNoQixJQUFJLENBQUNBLE9BQU8sQ0FBQ21HLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQ25HLE9BQU8sQ0FBQzBDLE9BQU8sQ0FBQyxDQUFDO01BQ3hCO01BRUEsSUFBSSxDQUFDMUMsT0FBTyxHQUFHLElBQUk7SUFDckI7RUFBQztJQUFBajlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEraUMsV0FBbUJJLFlBQTBCLEVBQVE7TUFBQSxJQUFBOWlDLEtBQUE7TUFDbkQsSUFBSSxDQUFDMDhCLE9BQU8sQ0FBQ3FHLFNBQVMsQ0FBQ0QsWUFBWSxDQUFDO01BRXBDLElBQU1odUIsT0FBTyxHQUFHLElBQUksQ0FBQzRuQixPQUFPLENBQUNzRyxJQUFJLENBQUMsSUFBSSxDQUFDdEYsWUFBWSxDQUFDLENBQUNqbkIsSUFBSSxDQUFDLFlBQU07UUFDOUR6VyxLQUFJLENBQUN3SSxPQUFPLENBQUNDLElBQUksQ0FBQyx1Q0FBdUMsRUFBRXpJLEtBQUksQ0FBQ3k5QixTQUFTLENBQUM7UUFFMUUsSUFBSXo5QixLQUFJLENBQUN1OUIsYUFBYSxDQUFDbk0sSUFBSSxFQUFFO1VBQzNCcHhCLEtBQUksQ0FBQ3U5QixhQUFhLENBQUNuTSxJQUFJLENBQUMsQ0FBQztRQUMzQjtNQUNGLENBQUMsQ0FBQyxDQUFDcmEsS0FBSyxDQUFDLFVBQUFyTixDQUFDLEVBQUk7UUFDWjFKLEtBQUksQ0FBQ3dJLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLGdEQUFnRCxFQUFFakosS0FBSSxDQUFDeTlCLFNBQVMsRUFBRS96QixDQUFDLENBQUN1NUIsSUFBSSxFQUFFdjVCLENBQUMsQ0FBQztNQUNqRyxDQUFDLENBQUM7SUFDSjtFQUFDO0VBQUEsT0FBQTJ6QixXQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5SUg7QUFDQTtBQUNBOztBQUUyRDtBQUNmO0FBQ0U7QUFFUztBQUFBLElBRWxDeE0sYUFBYTtFQWFoQyxTQUFBQSxjQUFBLEVBQWM7SUFBQS94QiwySUFBQSxPQUFBK3hCLGFBQUE7SUFDWixNQUFNLElBQUkzckIsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMxRix3SUFBQSxDQUFBcXhCLGFBQUE7SUFBQXB4QixHQUFBO0lBQUFFLEtBQUEsRUFaRCxTQUFBdWpDLE9BQWNuNkIsS0FBYSxFQUFFd3lCLGNBQWMsRUFBRWtFLHFCQUFxQixFQUFFQyxzQkFBc0IsRUFBRTlPLG1CQUF3QyxFQUFXO01BQzdJLElBQU11UyxpQkFBaUIsR0FBR3Q2Qix3RUFBeUIsQ0FBQ0UsS0FBSyxDQUFDLENBQUNtQixZQUFZO01BRXZFLElBQUlpNUIsaUJBQWlCLENBQUN4L0IsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJdy9CLGlCQUFpQixDQUFDeC9CLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUN0RixPQUFPLElBQUkyM0IsbURBQWEsQ0FBQ0MsY0FBYyxFQUFFM0ssbUJBQW1CLENBQUM7TUFDL0Q7TUFFQSxPQUFPLElBQUkyTyxvREFBYyxDQUFDaEUsY0FBYyxFQUFFa0UscUJBQXFCLEVBQUVDLHNCQUFzQixFQUFFOU8sbUJBQW1CLENBQUM7SUFDL0c7RUFBQztFQUFBLE9BQUFDLGFBQUE7QUFBQTtBQUFBOXhCLDJJQUFBLENBWGtCOHhCLGFBQWEsYUFDRXhwQixvRUFBdUIsQ0FBQyxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYeEU7QUFDQTtBQUNBOztBQUV1RDtBQUNIO0FBRU47QUFFOUMsSUFBTSs3QixrQkFBa0IsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNwQyxJQUFNQyx1QkFBdUIsR0FBRyxLQUFLO0FBQUMsSUFxQmpCakcsU0FBUztFQVU1QixTQUFBQSxVQUFZdlUsWUFBOEIsRUFBRXJVLElBQVksRUFBRTlNLFFBQWdCLEVBQUU0MUIsV0FBbUIsRUFBRTFpQixPQUFnQyxFQUFFO0lBQUE5YiwySUFBQSxPQUFBcytCLFNBQUE7SUFBQXIrQiwySUFBQSxrQkFUL0ZzSSxvRUFBdUIsQ0FBQyxXQUFXLENBQUM7SUFBQXRJLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBQUFBLDJJQUFBO0lBVXRFLElBQUksQ0FBQ3crQixhQUFhLEdBQUcxVSxZQUFZO0lBQ2pDLElBQUksQ0FBQzJVLEtBQUssR0FBR2hwQixJQUFJO0lBQ2pCLElBQUksQ0FBQ2lwQixTQUFTLEdBQUcvMUIsUUFBUTtJQUN6QixJQUFJLENBQUNnMkIsWUFBWSxHQUFHQyxTQUFTLENBQUNMLFdBQVcsQ0FBQyxDQUFDTSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUNqRSxJQUFJLENBQUNyQixRQUFRLEdBQUczaEIsT0FBTztFQUN6QjtFQUFDcGIsd0lBQUEsQ0FBQTQ5QixTQUFBO0lBQUEzOUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWl1QixNQUFBLEVBQWM7TUFBQSxJQUFBNXRCLEtBQUE7TUFDWixJQUFJMDdCLCtFQUFnQyxFQUFFO1FBQ3BDLElBQU1xRyxhQUFhLEdBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDZCxJQUFJLENBQUNWLFFBQVE7VUFDaEI2RyxrQkFBa0IsRUFBbEJBO1FBQWtCLEVBQ25CO1FBRUQsSUFBSSxDQUFDMUcsT0FBTyxHQUFHLElBQUloQix5RkFBMEMsQ0FBQyxJQUFJLENBQUNsekIsT0FBTyxFQUFFLElBQUksQ0FBQyswQixhQUFhLEVBQUV3RSxhQUFhLENBQUM7UUFDOUcsSUFBSSxDQUFDckYsT0FBTyxDQUFDOU8sS0FBSyxDQUFDLElBQUksQ0FBQzhQLFlBQVksQ0FBQztRQUVyQyxJQUFJLENBQUNoQixPQUFPLENBQUNoOEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUE0aUMsV0FBVyxFQUFJO1VBQ3BELElBQUl0akMsS0FBSSxDQUFDdWpDLFNBQVMsQ0FBQyxDQUFDLElBQUlELFdBQVcsS0FBS0EsV0FBVyxDQUFDTCxJQUFJLEtBQUssQ0FBQyxJQUFJSyxXQUFXLENBQUNFLFFBQVEsS0FBSzlILDJHQUE0RCxDQUFDLEVBQUU7WUFDeEoxN0IsS0FBSSxDQUFDd0ksT0FBTyxDQUFDMkcsSUFBSSxDQUFDLG1EQUFtRCxFQUFFbTBCLFdBQVcsQ0FBQztZQUNuRnRqQyxLQUFJLENBQUN5akMsWUFBWSxDQUFDLENBQUM7VUFDckI7VUFFQXpqQyxLQUFJLENBQUN3SSxPQUFPLENBQUNTLEtBQUssQ0FBQywrQkFBK0IsRUFBRXE2QixXQUFXLENBQUM7UUFDbEUsQ0FBQyxDQUFDO1FBRUY7TUFDRjtJQUNGO0VBQUM7SUFBQTdqQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd0csWUFBQSxFQUF1QjtNQUNyQixPQUFPdTFCLCtFQUFnQyxJQUFJQSwyRkFBNEM7SUFDekY7RUFBQztJQUFBajhCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpZSxTQUFBLEVBQXVDO01BQ3JDLElBQUksQ0FBQyxJQUFJLENBQUM4ZSxPQUFPLEVBQUU7UUFDakIsT0FBTztVQUNMM08sS0FBSyxFQUFFLENBQUM7VUFDUkUsTUFBTSxFQUFFLENBQUM7VUFDVCtOLFdBQVcsRUFBRSxHQUFHO1VBQ2hCclEsR0FBRyxFQUFFLEdBQUc7VUFDUjZTLFlBQVksRUFBRUMseUVBQTZCO1VBQzNDeEMsWUFBWSxFQUFFO1FBQ2hCLENBQUM7TUFDSDtNQUVBLElBQU0wQyxVQUFVLEdBQUcsSUFBSSxDQUFDakMsT0FBTyxDQUFDOWUsUUFBUSxDQUFDLENBQUM7TUFDMUMsSUFBTW9lLFdBQVcsR0FBRzJDLFVBQVUsQ0FBQzNDLFdBQVcsSUFBSSxJQUFJLENBQUN1QixhQUFhLENBQUMsYUFBYSxDQUFDO01BQy9FLElBQU0yQixlQUFlLEdBQUcsQ0FBQ2pnQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDcTlCLFFBQVEsQ0FBQ2QsZUFBZSxJQUFJLElBQUk7TUFFM0UsSUFBSSxJQUFJLENBQUM4QixhQUFhLENBQUN3QixRQUFRLElBQUksSUFBSSxDQUFDeEIsYUFBYSxDQUFDd0IsUUFBUSxDQUFDejFCLE1BQU0sRUFBRTtRQUNyRXExQixVQUFVLENBQUMxQyxZQUFZLEdBQUcsSUFBSSxDQUFDc0IsYUFBYSxDQUFDd0IsUUFBUSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzlEO01BRUEsSUFBSUwsVUFBVSxDQUFDK0UsUUFBUSxJQUFJL0UsVUFBVSxDQUFDZ0YsWUFBWSxLQUFLLEtBQUssRUFBRTtRQUM1RGhGLFVBQVUsQ0FBQzNDLFdBQVcsR0FBR0EsV0FBVyxHQUFHMkMsVUFBVSxDQUFDaFQsR0FBRztNQUN2RDtNQUVBLElBQUksQ0FBQ2dULFVBQVUsQ0FBQzNDLFdBQVcsRUFBRTtRQUMzQjJDLFVBQVUsQ0FBQzNDLFdBQVcsR0FBR0EsV0FBVztNQUN0QztNQUVBLElBQUksQ0FBQzJDLFVBQVUsQ0FBQytFLFFBQVEsRUFBRTtRQUN4Qi9FLFVBQVUsQ0FBQ2hULEdBQUcsR0FBR3BmLElBQUksQ0FBQzR5QixHQUFHLENBQUMsR0FBRyxFQUFFRCxlQUFlLEdBQUdsRCxXQUFXLENBQUM7TUFDL0Q7TUFFQSxJQUFJMkMsVUFBVSxDQUFDZ0Usa0JBQWtCLEdBQUcsQ0FBQyxFQUFFO1FBQ3JDaEUsVUFBVSxDQUFDSCxZQUFZLEdBQUdDLHdFQUE0QjtNQUN4RCxDQUFDLE1BQU0sSUFBSUUsVUFBVSxDQUFDaUUsUUFBUSxHQUFHLENBQUMsRUFBRTtRQUNsQ2pFLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyxxRUFBeUI7TUFDckQsQ0FBQyxNQUFNLElBQUlFLFVBQVUsQ0FBQ3BmLEtBQUssRUFBRTtRQUMzQm9mLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyxzRUFBMEI7TUFDdEQsQ0FBQyxNQUFNO1FBQ0xFLFVBQVUsQ0FBQ0gsWUFBWSxHQUFHQyx5RUFBNkI7TUFDekQ7TUFFQSxPQUFPRSxVQUFVO0lBQ25CO0VBQUM7SUFBQWwvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxRQUFBLEVBQWdCO01BQ2QsSUFBSSxJQUFJLENBQUM0OEIsT0FBTyxFQUFFO1FBQ2hCLElBQUksQ0FBQ0EsT0FBTyxDQUFDNThCLE9BQU8sQ0FBQyxDQUFDO01BQ3hCO01BRUEsSUFBSSxDQUFDNDhCLE9BQU8sR0FBRyxJQUFJO0lBQ3JCO0VBQUM7SUFBQWo5QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNGpDLFVBQUEsRUFBNkI7TUFDM0IsSUFBTUssZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLENBQUNDLGVBQWUsSUFBSTVrQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDMmtDLGVBQWUsR0FBR1IsdUJBQXVCO01BRTdILE9BQU8sSUFBSSxDQUFDOUYsYUFBYSxJQUFJLElBQUksQ0FBQ2IsT0FBTyxJQUFJLElBQUksQ0FBQ2EsYUFBYSxDQUFDd0IsUUFBUSxDQUFDejFCLE1BQU0sS0FBSyxDQUFDLElBQUlzNkIsZ0NBQWdDO0lBQzNIO0VBQUM7SUFBQW5rQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBOGpDLGFBQUEsRUFBNkI7TUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQ0YsU0FBUyxDQUFDLENBQUMsRUFBRTtRQUNyQjtNQUNGO01BRUEsSUFBSSxDQUFDLzZCLE9BQU8sQ0FBQzJHLElBQUksQ0FBQywyRUFBMkUsRUFBRSxJQUFJLENBQUNzdUIsU0FBUyxFQUFFNEYsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO01BRTlJLElBQUksQ0FBQ1EsZUFBZSxHQUFHNWtDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFFakMsSUFBSSxDQUFDNGtDLE1BQU0sQ0FBQyxDQUFDO0lBQ2Y7RUFBQztJQUFBcmtDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFta0MsT0FBQSxFQUF1QjtNQUNyQixJQUFJLENBQUNwSCxPQUFPLENBQUM1OEIsT0FBTyxDQUFDLENBQUM7TUFFdEIsSUFBSSxDQUFDNDhCLE9BQU8sR0FBRyxJQUFJO01BRW5CLElBQUksQ0FBQzlPLEtBQUssQ0FBQyxDQUFDO0lBQ2Q7RUFBQztFQUFBLE9BQUF3UCxTQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pKSDtBQUNBO0FBQ0E7QUFGQSxJQU9xQjFNLGlCQUFpQjtFQXNCcEMsU0FBQUEsa0JBQUEsRUFBYztJQUFBNXhCLDJJQUFBLE9BQUE0eEIsaUJBQUE7SUFDWixNQUFNLElBQUl4ckIsS0FBSyxDQUFDLGtFQUFrRSxDQUFDO0VBQ3JGO0VBQUMxRix3SUFBQSxDQUFBa3hCLGlCQUFBO0lBQUFqeEIsR0FBQTtJQUFBRSxLQUFBLEVBdkJELFNBQUFva0MsMEJBQWlDQyxJQUF1QixFQUFFMTJCLElBQXdCLEVBQUU7TUFDbEYsSUFBSSxPQUFPQSxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQzlCLE9BQU87VUFDTGtpQixLQUFLLEVBQUUsS0FBSztVQUNaQyxnQkFBZ0IsZ0JBQUFwc0IsTUFBQSxDQUFnQjJnQyxJQUFJLGlEQUFBM2dDLE1BQUEsQ0FBQWpELG1JQUFBLENBQXFEa04sSUFBSTtRQUMvRixDQUFDO01BQ0g7TUFFQSxJQUFJQSxJQUFJLENBQUNoRSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU87VUFDTGttQixLQUFLLEVBQUUsS0FBSztVQUNaQyxnQkFBZ0IsZ0JBQUFwc0IsTUFBQSxDQUFnQjJnQyxJQUFJLHlFQUFBM2dDLE1BQUEsQ0FBc0VpSyxJQUFJLENBQUNoRSxNQUFNO1FBQ3ZILENBQUM7TUFDSDtNQUVBLE9BQU87UUFDTGttQixLQUFLLEVBQUUsSUFBSTtRQUNYQyxnQkFBZ0IsRUFBRTtNQUNwQixDQUFDO0lBQ0g7RUFBQztFQUFBLE9BQUFpQixpQkFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0JIO0FBQ0E7QUFDQTtBQUMrQztBQUFBLElBSTFCcVEsaUJBQWlCO0VBb0xwQyxTQUFBQSxrQkFBQSxFQUFjO0lBQUFqaUMsMklBQUEsT0FBQWlpQyxpQkFBQTtJQUNaLE1BQU0sSUFBSTc3QixLQUFLLENBQUMsa0VBQWtFLENBQUM7RUFDckY7RUFBQzFGLHdJQUFBLENBQUF1aEMsaUJBQUE7SUFBQXRoQyxHQUFBO0lBQUFFLEtBQUEsRUFyTEQsU0FBQXNrQyxpQ0FBd0M1WCxNQUFtQixFQUFFNlgsU0FBMkIsRUFBRTdhLHNCQUFnRSxFQUFFQyxzQkFBZ0UsRUFBUztNQUNuTyxJQUFNNmEsYUFBYSxHQUFHLElBQUlDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQzVkLElBQU1DLGFBQWEsR0FBRyxJQUFJRCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7TUFDaEwsSUFBTUUsWUFBWSxHQUFHLElBQUlGLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ3pULElBQU1HLFlBQVksR0FBRyxJQUFJSCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUN2UyxJQUFNSSxZQUFZLEdBQUcsSUFBSUosVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQ25OLElBQU1LLFlBQVksR0FBRyxJQUFJTCxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO01BQy9ILElBQU1NLFVBQVUsR0FBRyxJQUFJTixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztNQUNqUSxJQUFNTyxZQUFZLEdBQUcsSUFB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O1dBQ0E7V0FDQSx3Q0FBd0MseUNBQXlDO1dBQ2pGO1dBQ0E7V0FDQSxFOzs7OztXQ1BBLHNGOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHNEQUFzRCxrQkFBa0I7V0FDeEU7V0FDQSwrQ0FBK0MsY0FBYztXQUM3RCxFOzs7O1VDTkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KGFycik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG4gIHJldHVybiBzZWxmO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlamVjdChlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLmRvbmUpIHtcbiAgICByZXNvbHZlKHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgYXJncyA9IGFyZ3VtZW50cztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgICAgZnVuY3Rpb24gX25leHQodmFsdWUpIHtcbiAgICAgICAgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3Rocm93KGVycikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKFwiLi90b1Byb3BlcnR5S2V5LmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9nZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoXCIuL3NldFByb3RvdHlwZU9mLmpzXCIpO1xuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW5oZXJpdHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQociwgbCkge1xuICB2YXIgdCA9IG51bGwgPT0gciA/IG51bGwgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBTeW1ib2wgJiYgcltTeW1ib2wuaXRlcmF0b3JdIHx8IHJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSB0KSB7XG4gICAgdmFyIGUsXG4gICAgICBuLFxuICAgICAgaSxcbiAgICAgIHUsXG4gICAgICBhID0gW10sXG4gICAgICBmID0gITAsXG4gICAgICBvID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpID0gKHQgPSB0LmNhbGwocikpLm5leHQsIDAgPT09IGwpIHtcbiAgICAgICAgaWYgKE9iamVjdCh0KSAhPT0gdCkgcmV0dXJuO1xuICAgICAgICBmID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoZiA9IChlID0gaS5jYWxsKHQpKS5kb25lKSAmJiAoYS5wdXNoKGUudmFsdWUpLCBhLmxlbmd0aCAhPT0gbCk7IGYgPSAhMCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgbyA9ICEwLCBuID0gcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFmICYmIG51bGwgIT0gdFtcInJldHVyblwiXSAmJiAodSA9IHRbXCJyZXR1cm5cIl0oKSwgT2JqZWN0KHUpICE9PSB1KSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKG8pIHRocm93IG47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXlMaW1pdCwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9ub25JdGVyYWJsZVJlc3QsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVTcHJlYWQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgYXNzZXJ0VGhpc0luaXRpYWxpemVkID0gcmVxdWlyZShcIi4vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzXCIpO1xuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgaWYgKG8gPT09IHMpIHtcbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gaSkgdGhyb3cgYTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICBkb25lOiAhMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZm9yIChuLm1ldGhvZCA9IGksIG4uYXJnID0gYTs7KSB7XG4gICAgICAgIHZhciBjID0gbi5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGMpIHtcbiAgICAgICAgICB2YXIgdSA9IG1heWJlSW52b2tlRGVsZWdhdGUoYywgbik7XG4gICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgIGlmICh1ID09PSB5KSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJuZXh0XCIgPT09IG4ubWV0aG9kKSBuLnNlbnQgPSBuLl9zZW50ID0gbi5hcmc7ZWxzZSBpZiAoXCJ0aHJvd1wiID09PSBuLm1ldGhvZCkge1xuICAgICAgICAgIGlmIChvID09PSBoKSB0aHJvdyBvID0gcywgbi5hcmc7XG4gICAgICAgICAgbi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyk7XG4gICAgICAgIH0gZWxzZSBcInJldHVyblwiID09PSBuLm1ldGhvZCAmJiBuLmFicnVwdChcInJldHVyblwiLCBuLmFyZyk7XG4gICAgICAgIG8gPSBmO1xuICAgICAgICB2YXIgcCA9IHRyeUNhdGNoKGUsIHIsIG4pO1xuICAgICAgICBpZiAoXCJub3JtYWxcIiA9PT0gcC50eXBlKSB7XG4gICAgICAgICAgaWYgKG8gPSBuLmRvbmUgPyBzIDogbCwgcC5hcmcgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcC5hcmcsXG4gICAgICAgICAgICBkb25lOiBuLmRvbmVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIFwidGhyb3dcIiA9PT0gcC50eXBlICYmIChvID0gcywgbi5tZXRob2QgPSBcInRocm93XCIsIG4uYXJnID0gcC5hcmcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSB7XG4gICAgdmFyIG4gPSByLm1ldGhvZCxcbiAgICAgIG8gPSBlLml0ZXJhdG9yW25dO1xuICAgIGlmIChvID09PSB0KSByZXR1cm4gci5kZWxlZ2F0ZSA9IG51bGwsIFwidGhyb3dcIiA9PT0gbiAmJiBlLml0ZXJhdG9yW1wicmV0dXJuXCJdICYmIChyLm1ldGhvZCA9IFwicmV0dXJuXCIsIHIuYXJnID0gdCwgbWF5YmVJbnZva2VEZWxlZ2F0ZShlLCByKSwgXCJ0aHJvd1wiID09PSByLm1ldGhvZCkgfHwgXCJyZXR1cm5cIiAhPT0gbiAmJiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ1wiICsgbiArIFwiJyBtZXRob2RcIikpLCB5O1xuICAgIHZhciBpID0gdHJ5Q2F0Y2gobywgZS5pdGVyYXRvciwgci5hcmcpO1xuICAgIGlmIChcInRocm93XCIgPT09IGkudHlwZSkgcmV0dXJuIHIubWV0aG9kID0gXCJ0aHJvd1wiLCByLmFyZyA9IGkuYXJnLCByLmRlbGVnYXRlID0gbnVsbCwgeTtcbiAgICB2YXIgYSA9IGkuYXJnO1xuICAgIHJldHVybiBhID8gYS5kb25lID8gKHJbZS5yZXN1bHROYW1lXSA9IGEudmFsdWUsIHIubmV4dCA9IGUubmV4dExvYywgXCJyZXR1cm5cIiAhPT0gci5tZXRob2QgJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksIHIuZGVsZWdhdGUgPSBudWxsLCB5KSA6IGEgOiAoci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpLCByLmRlbGVnYXRlID0gbnVsbCwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHtcbiAgICAgIHRyeUxvYzogdFswXVxuICAgIH07XG4gICAgMSBpbiB0ICYmIChlLmNhdGNoTG9jID0gdFsxXSksIDIgaW4gdCAmJiAoZS5maW5hbGx5TG9jID0gdFsyXSwgZS5hZnRlckxvYyA9IHRbM10pLCB0aGlzLnRyeUVudHJpZXMucHVzaChlKTtcbiAgfVxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KHQpIHtcbiAgICB2YXIgZSA9IHQuY29tcGxldGlvbiB8fCB7fTtcbiAgICBlLnR5cGUgPSBcIm5vcm1hbFwiLCBkZWxldGUgZS5hcmcsIHQuY29tcGxldGlvbiA9IGU7XG4gIH1cbiAgZnVuY3Rpb24gQ29udGV4dCh0KSB7XG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3tcbiAgICAgIHRyeUxvYzogXCJyb290XCJcbiAgICB9XSwgdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyksIHRoaXMucmVzZXQoITApO1xuICB9XG4gIGZ1bmN0aW9uIHZhbHVlcyhlKSB7XG4gICAgaWYgKGUgfHwgXCJcIiA9PT0gZSkge1xuICAgICAgdmFyIHIgPSBlW2FdO1xuICAgICAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLm5leHQpIHJldHVybiBlO1xuICAgICAgaWYgKCFpc05hTihlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIG8gPSAtMSxcbiAgICAgICAgICBpID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIGZvciAoOyArK28gPCBlLmxlbmd0aDspIGlmIChuLmNhbGwoZSwgbykpIHJldHVybiBuZXh0LnZhbHVlID0gZVtvXSwgbmV4dC5kb25lID0gITEsIG5leHQ7XG4gICAgICAgICAgICByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBpLm5leHQgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKF90eXBlb2YoZSkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gIH1cbiAgcmV0dXJuIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBvKGcsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBvKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICB2YWx1ZTogR2VuZXJhdG9yRnVuY3Rpb24sXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksIGUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgdmFyIGUgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQgJiYgdC5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gISFlICYmIChlID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIgPT09IChlLmRpc3BsYXlOYW1lIHx8IGUubmFtZSkpO1xuICB9LCBlLm1hcmsgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YodCwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpIDogKHQuX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIGRlZmluZSh0LCB1LCBcIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSwgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGcpLCB0O1xuICB9LCBlLmF3cmFwID0gZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgX19hd2FpdDogdFxuICAgIH07XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSksIGRlZmluZShBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSwgYywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvciwgZS5hc3luYyA9IGZ1bmN0aW9uICh0LCByLCBuLCBvLCBpKSB7XG4gICAgdm9pZCAwID09PSBpICYmIChpID0gUHJvbWlzZSk7XG4gICAgdmFyIGEgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKHQsIHIsIG4sIG8pLCBpKTtcbiAgICByZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKHIpID8gYSA6IGEubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LmRvbmUgPyB0LnZhbHVlIDogYS5uZXh0KCk7XG4gICAgfSk7XG4gIH0sIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhnKSwgZGVmaW5lKGcsIHUsIFwiR2VuZXJhdG9yXCIpLCBkZWZpbmUoZywgYSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgZGVmaW5lKGcsIFwidG9TdHJpbmdcIiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9KSwgZS5rZXlzID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IE9iamVjdCh0KSxcbiAgICAgIHIgPSBbXTtcbiAgICBmb3IgKHZhciBuIGluIGUpIHIucHVzaChuKTtcbiAgICByZXR1cm4gci5yZXZlcnNlKCksIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICBmb3IgKDsgci5sZW5ndGg7KSB7XG4gICAgICAgIHZhciB0ID0gci5wb3AoKTtcbiAgICAgICAgaWYgKHQgaW4gZSkgcmV0dXJuIG5leHQudmFsdWUgPSB0LCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0LmRvbmUgPSAhMCwgbmV4dDtcbiAgICB9O1xuICB9LCBlLnZhbHVlcyA9IHZhbHVlcywgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG4gICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KGUpIHtcbiAgICAgIGlmICh0aGlzLnByZXYgPSAwLCB0aGlzLm5leHQgPSAwLCB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdCwgdGhpcy5kb25lID0gITEsIHRoaXMuZGVsZWdhdGUgPSBudWxsLCB0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLmFyZyA9IHQsIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpLCAhZSkgZm9yICh2YXIgciBpbiB0aGlzKSBcInRcIiA9PT0gci5jaGFyQXQoMCkgJiYgbi5jYWxsKHRoaXMsIHIpICYmICFpc05hTigrci5zbGljZSgxKSkgJiYgKHRoaXNbcl0gPSB0KTtcbiAgICB9LFxuICAgIHN0b3A6IGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICB0aGlzLmRvbmUgPSAhMDtcbiAgICAgIHZhciB0ID0gdGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihlKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB0aHJvdyBlO1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKG4sIG8pIHtcbiAgICAgICAgcmV0dXJuIGEudHlwZSA9IFwidGhyb3dcIiwgYS5hcmcgPSBlLCByLm5leHQgPSBuLCBvICYmIChyLm1ldGhvZCA9IFwibmV4dFwiLCByLmFyZyA9IHQpLCAhIW87XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBvID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IG8gPj0gMDsgLS1vKSB7XG4gICAgICAgIHZhciBpID0gdGhpcy50cnlFbnRyaWVzW29dLFxuICAgICAgICAgIGEgPSBpLmNvbXBsZXRpb247XG4gICAgICAgIGlmIChcInJvb3RcIiA9PT0gaS50cnlMb2MpIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIGlmIChpLnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgYyA9IG4uY2FsbChpLCBcImNhdGNoTG9jXCIpLFxuICAgICAgICAgICAgdSA9IG4uY2FsbChpLCBcImZpbmFsbHlMb2NcIik7XG4gICAgICAgICAgaWYgKGMgJiYgdSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYykge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuY2F0Y2hMb2MpIHJldHVybiBoYW5kbGUoaS5jYXRjaExvYywgITApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXUpIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGkuZmluYWxseUxvYykgcmV0dXJuIGhhbmRsZShpLmZpbmFsbHlMb2MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodCwgZSkge1xuICAgICAgZm9yICh2YXIgciA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyByID49IDA7IC0tcikge1xuICAgICAgICB2YXIgbyA9IHRoaXMudHJ5RW50cmllc1tyXTtcbiAgICAgICAgaWYgKG8udHJ5TG9jIDw9IHRoaXMucHJldiAmJiBuLmNhbGwobywgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IG8uZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBpID0gbztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaSAmJiAoXCJicmVha1wiID09PSB0IHx8IFwiY29udGludWVcIiA9PT0gdCkgJiYgaS50cnlMb2MgPD0gZSAmJiBlIDw9IGkuZmluYWxseUxvYyAmJiAoaSA9IG51bGwpO1xuICAgICAgdmFyIGEgPSBpID8gaS5jb21wbGV0aW9uIDoge307XG4gICAgICByZXR1cm4gYS50eXBlID0gdCwgYS5hcmcgPSBlLCBpID8gKHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMubmV4dCA9IGkuZmluYWxseUxvYywgeSkgOiB0aGlzLmNvbXBsZXRlKGEpO1xuICAgIH0sXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHQsIGUpIHtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gXCJicmVha1wiID09PSB0LnR5cGUgfHwgXCJjb250aW51ZVwiID09PSB0LnR5cGUgPyB0aGlzLm5leHQgPSB0LmFyZyA6IFwicmV0dXJuXCIgPT09IHQudHlwZSA/ICh0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHQuYXJnLCB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCIsIHRoaXMubmV4dCA9IFwiZW5kXCIpIDogXCJub3JtYWxcIiA9PT0gdC50eXBlICYmIGUgJiYgKHRoaXMubmV4dCA9IGUpLCB5O1xuICAgIH0sXG4gICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2godCkge1xuICAgICAgZm9yICh2YXIgZSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBlID49IDA7IC0tZSkge1xuICAgICAgICB2YXIgciA9IHRoaXMudHJ5RW50cmllc1tlXTtcbiAgICAgICAgaWYgKHIuZmluYWxseUxvYyA9PT0gdCkgcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLCByLmFmdGVyTG9jKSwgcmVzZXRUcnlFbnRyeShyKSwgeTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLnRyeUxvYyA9PT0gdCkge1xuICAgICAgICAgIHZhciBuID0gci5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChcInRocm93XCIgPT09IG4udHlwZSkge1xuICAgICAgICAgICAgdmFyIG8gPSBuLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRoSG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5TGltaXQgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiKTtcbnZhciB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIG5vbkl0ZXJhYmxlUmVzdCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiKTtcbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zbGljZWRUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIGFycmF5V2l0aG91dEhvbGVzID0gcmVxdWlyZShcIi4vYXJyYXlXaXRob3V0SG9sZXMuanNcIik7XG52YXIgaXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5LmpzXCIpO1xudmFyIHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5ID0gcmVxdWlyZShcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgbm9uSXRlcmFibGVTcHJlYWQgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVNwcmVhZC5qc1wiKTtcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9QcmltaXRpdmUsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKFwiLi90b1ByaW1pdGl2ZS5qc1wiKTtcbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KGFyZykge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJnLCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIF90eXBlb2Yoa2V5KSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Qcm9wZXJ0eUtleSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIChtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cyksIF90eXBlb2Yobyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcblxuY29uc3QgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQgPSAzMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnRGb2N1c0ludGVydmFsOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faXNGb3JlZ3JvdW5kID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0KHRoaXMuX2lzRm9yZWdyb3VuZCk7XG4gICAgdGhpcy5kZXRlY3RUYWJGb2N1c0NoYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGlzRm9yZWdyb3VuZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZDtcbiAgfVxuXG4gIGdldFRpbWVTaW5jZUxhc3RDaGFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlY3RUYWJGb2N1c0NoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgaGlkZGVuO1xuICAgIGxldCB2aXNpYmlsaXR5Q2hhbmdlO1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGEgZGVmaW5pdGlvbiBmb3IgJ21zSGlkZGVuJyBvciAnd2Via2l0SGlkZGVuJyB0eXBlc1xuICAgIC8vIFJlcXVpcmVkIHRvIEB0cy1pZ25vcmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaGlkZGVuID0gJ21zSGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnbXN2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnd2Via2l0SGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAnd2Via2l0dmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQuaGlkZGVuICE9PSAndW5kZWZpbmVkJykgeyAvLyBPcGVyYSAxMi4xMCBhbmQgRmlyZWZveCAxOCBhbmQgbGF0ZXIgc3VwcG9ydFxuICAgICAgaGlkZGVuID0gJ2hpZGRlbic7XG4gICAgICB2aXNpYmlsaXR5Q2hhbmdlID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudCAqL1xuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGlzRm9yZWdyb3VuZCA9ICFkb2N1bWVudFtoaWRkZW5dO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnRbaGlkZGVuXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuXG4gICAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2UsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0ZW5Gb3JEb2N1bWVudEZvY3VzLmNhbGwodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEb2N1bWVudEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBpc0ZvcmVncm91bmQgPSBkb2N1bWVudC5oYXNGb2N1cygpO1xuXG4gICAgICB0aGlzLnNldEZvY3VzU3RhdGUoaXNGb3JlZ3JvdW5kKTtcbiAgICB9LCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RvY3VtZW50Rm9jdXNJbnRlcnZhbCA9IG51bGw7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pc0ZvcmVncm91bmQgPT09IGlzRm9yZWdyb3VuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRm9yZWdyb3VuZC52YWx1ZSA9IGlzRm9yZWdyb3VuZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnJvd3NlckRldGVjdG9yIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4ID0gLyhNU0lFfCg/IUdlY2tvLispRmlyZWZveHwoPyFBcHBsZVdlYktpdC4rQ2hyb21lLispU2FmYXJpfCg/IUFwcGxlV2ViS2l0LispQ2hyb21lfEFwcGxlV2ViS2l0KD8hLitDaHJvbWV8LitTYWZhcmkpfEdlY2tvKD8hLitGaXJlZm94KSkoPzogfFxcLykoW1xcZC5hcHJlXSspL2c7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJNYWpvclZlcnNpb24gPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIHtcbiAgZ2V0U3RyaW5nVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpIHx8XG4gICAgICB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCkgfHxcbiAgICAgIHRoaXMuZGVmYXVsdFN0cmluZ1ZhbHVlW25hbWVdO1xuICB9XG5cbiAgZ2V0Qm9vbGVhblZhbHVlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPT09ICd0cnVlJyB8fCB2YWx1ZSA9PT0gJzEnIHx8IHZhbHVlID09PSAnT24nO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRnJvbVVyaSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKTtcblxuICAgIGlmICh2YWx1ZUZyb21VcmkpIHtcbiAgICAgIHJldHVybiB2YWx1ZUZyb21VcmkgPT09ICd0cnVlJyB8fCB2YWx1ZUZyb21VcmkgPT09ICcxJyB8fCB2YWx1ZUZyb21VcmkgPT09ICdPbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJvb2xlYW5WYWx1ZVtuYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRTdHJpbmdWYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1tZXRyaWNzLWxldmVsJzogVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFRvVGVsZW1ldHJ5TGV2ZWxUeXBlKFRlbGVtZXRyeURlZmF1bHQuZGVmYXVsdFRlbGVtZXRyeUxldmVsKSxcbiAgICAgICdwaGVuaXgtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY29uc29sZS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtdGVsZW1ldHJ5LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNoYW5uZWwtdG9rZW4nOiAnJyxcbiAgICAgICdwaGVuaXgtdXJpJzogJycsXG4gICAgICAncGhlbml4LWJhc2UtdXJpJzogJydcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJvb2xlYW5WYWx1ZSgpOiB7IFtuYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmV0cnktb24tZmFpbHVyZSc6IHRydWUsXG4gICAgICAncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbic6IHRydWUsXG4gICAgICAncGhlbml4LWZvcmNlLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1yZXN0YXJ0JzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGFWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMuc3JjKTtcblxuICAgICAgaW1nID0gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yWydjb25uZWN0aW9uJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmsgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10uZG93bmxpbmtNYXg7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnVW5rbm93bic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRvclsnY29ubmVjdGlvbiddLmVmZmVjdGl2ZVR5cGUgfHwgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10udHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5ydHQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuICAgIH07XG5cbiAgICBuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgbmF2aWdhdG9yWydjb25uZWN0aW9uJ10ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IFVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBkb2N1bWVudD8uY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ1NhZmFyaSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNNb2JpbGUoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0eXBlb2YgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3NvciA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAgIHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yID09PSAndW5kZWZpbmVkJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXI/LnByb3RvdHlwZT8uY3JlYXRlRW5jb2RlZFN0cmVhbXMgIT09ICd1bmRlZmluZWQnO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmluZ3Mge1xuICBzdGF0aWMgcmFuZG9tKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5kb20xM0NoYXJhY3RlcnMgPSAoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMiwgMTUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsb29wczogbnVtYmVyID0gTWF0aC5jZWlsKGxlbmd0aCAvIDEzKTtcblxuICAgIHJldHVybiBuZXcgQXJyYXkobG9vcHMpLmZpbGwocmFuZG9tMTNDaGFyYWN0ZXJzKS5yZWR1Y2UoKHN0cmluZywgZnVuYykgPT4ge1xuICAgICAgcmV0dXJuIHN0cmluZyArIGZ1bmMoKTtcbiAgICB9LCAnJykuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5ncyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRVbnJlYWNoYWJsZSh4OiBuZXZlcik6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIFske3h9XS4gVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVhY2hlZGApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3NlcnRVbnJlYWNoYWJsZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGVuZGVycyB7XG4gIHByaXZhdGUgX2FwcGVuZGVyczogQXJyYXk8SUFwcGVuZGVyPiA9IFtdO1xuXG4gIGdldCB2YWx1ZSgpOiBBcnJheTxJQXBwZW5kZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgYWRkKGFwcGVuZGVyOiBJQXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMucHVzaChhcHBlbmRlcik7XG4gIH1cblxuICByZW1vdmUoYXBwZW5kZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMgPSB0aGlzLl9hcHBlbmRlcnMucmVkdWNlKChpdGVtcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCEoaXRlbSA9PT0gYXBwZW5kZXIpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9LCBbXSBhcyBBcnJheTxJQXBwZW5kZXI+KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnNvbGVBcHBlbmRlciBpbXBsZW1lbnRzIElBcHBlbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsO1xuXG4gIGxvZyhsb2dMZXZlbDogTG9nZ2luZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNhdGVnb3J5OiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAobG9nTGV2ZWwgPCB0aGlzLl90aHJlc2hvbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTWVzc2FnZSA9IGAke2RhdGUudG9JU09TdHJpbmcoKX0gWyR7Y2F0ZWdvcnl9XSBbJHtMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdfV0gJHttZXNzYWdlfWA7XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgY29uc29sZS5sb2coZnVsbE1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihmdWxsTWVzc2FnZSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtJQXBwZW5kZXJ9IGZyb20gJy4vSUFwcGVuZGVyJztcbmltcG9ydCBBcHBlbmRlcnMgZnJvbSAnLi9BcHBlbmRlcnMnO1xuaW1wb3J0IExvZ2dpbmdUaHJlc2hvbGQgZnJvbSAnLi9Mb2dnaW5nVGhyZXNob2xkJztcblxuZXhwb3J0IGVudW0gTG9nZ2luZ0xldmVsIHtcbiAgQWxsID0gLTEsXG4gIFRyYWNlID0gMTAsXG4gIERlYnVnID0gMjAsXG4gIEluZm8gPSAzMCxcbiAgV2FybiA9IDQwLFxuICBFcnJvciA9IDUwLFxuICBGYXRhbCA9IDYwLFxuICBPZmYgPSAxMDAsXG59XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdMZXZlbFR5cGUgPSAnT2ZmJyB8ICdUcmFjZScgfCAnRGVidWcnIHwgJ0luZm8nIHwgJ1dhcm4nIHwgJ0Vycm9yJyB8ICdGYXRhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwZW5kZXJzOiBBcHBlbmRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZDtcblxuICBnZXQgY2F0ZWdvcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcnk7XG4gIH1cblxuICBnZXQgYXBwZW5kZXJzKCk6IEFwcGVuZGVycyB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ1RocmVzaG9sZCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHRyYWNlKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5UcmFjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5UcmFjZSwgYXJncyk7XG4gIH1cblxuICBkZWJ1ZyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRGVidWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRGVidWcsIGFyZ3MpO1xuICB9XG5cbiAgaW5mbyguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5JbmZvLCBhcmdzKTtcbiAgfVxuXG4gIHdhcm4oLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuV2FybiwgYXJncyk7XG4gIH1cblxuICBlcnJvciguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRXJyb3IsIGFyZ3MpO1xuICB9XG5cbiAgZmF0YWwoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLkZhdGFsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkZhdGFsLCBhcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKGxldmVsOiBudW1iZXIsIGFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnJlcGxhY2VQbGFjZWhvbGRlcnMoYXJncyk7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMudmFsdWUuZm9yRWFjaCgoYXBwZW5kZXI6IElBcHBlbmRlcikgPT4ge1xuICAgICAgYXBwZW5kZXIubG9nKGxldmVsLCBtZXNzYWdlLCB0aGlzLmNhdGVnb3J5LCBkYXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gYXJnc1swXTtcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgd2hpbGUgKHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZiAmJiBhcmdzLmxlbmd0aCA+IDEgJiYgaW5kZXggPj0gMCkge1xuICAgICAgaW5kZXggPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLmluZGV4T2YoJyUnLCBpbmRleCk7XG5cbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSwgaW5kZXggKyAyKTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlICclJzpcbiAgICAgICAgICAgIC8vIEVzY2FwZWQgJyUlJyB0dXJucyBpbnRvICclJ1xuICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpbmRleCsrO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJyVkJyBvciAnJXMnIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nKGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgJWonIHdpdGggdGhlIGFyZ3VtZW50XG4gICAgICAgICAgICBhcmdzWzBdID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyA9IHRoaXMucmVwbGFjZUFyZ3VtZW50KFxuICAgICAgICAgICAgICB0aGlzLnN0cmluZ2lmeShhcmdzWzFdKSxcbiAgICAgICAgICAgICAgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyxcbiAgICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGFyZ3Muc3BsaWNlKDEsIDEpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MgPSBhcmdzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCArIDEgPT09IGFycmF5Lmxlbmd0aCAmJiBjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArICdcXG4nICsgdGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUuc3RhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yICsgYFske3RoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlKX1dYDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhcmdzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShhcmc6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2FjaGUgPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGFyZyBpbnN0YW5jZW9mIEVycm9yID8gdGhpcy50b1N0cmluZyhhcmcpIDogYXJnLFxuICAgICAgICAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY2FjaGUuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiAnPHJlY3Vyc2l2ZT4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIDJcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICdbb2JqZWN0IGludmFsaWQgSlNPTi5zdHJpbmdpZnldJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VBcmd1bWVudChhcmd1bWVudDogYW55LCByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCkgKyB0aGlzLnRvU3RyaW5nKGFyZ3VtZW50KSArIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMik7XG4gIH1cblxuICBwcml2YXRlIHRvU3RyaW5nKGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBkYXRhID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCB0b1N0cmluZ1N0ciA9ICcnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0b1N0cmluZ1N0ciA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSAnW29iamVjdCBpbnZhbGlkIHRvU3RyaW5nKCldJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1N0cmluZ1N0cjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNhdGVnb3J5OiBzdHJpbmcsIGFwcGVuZGVyczogQXBwZW5kZXJzLCB0aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQpIHtcbiAgICB0aGlzLl9jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuX2FwcGVuZGVycyA9IGFwcGVuZGVycztcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJEZWZhdWx0cyB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdExvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxbQnVpbGRGZWF0dXJlcy5zZW5kTG9nc107XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLmxvZ1RvQ29uc29sZV07XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlciwge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuaW1wb3J0IEFwcGVuZGVycyBmcm9tICcuL0FwcGVuZGVycyc7XG5pbXBvcnQgTG9nZ2luZ1RocmVzaG9sZCBmcm9tICcuL0xvZ2dpbmdUaHJlc2hvbGQnO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuL0NvbnNvbGVBcHBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5QXBwZW5kZXIgZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXInO1xuaW1wb3J0IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24gZnJvbSAnLi4vdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgZnJvbSAnLi4vZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXInO1xuaW1wb3J0IHtJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcn0gZnJvbSAnLi4vZG9tL0lDb25maWd1cmF0aW9uUGFyYW1hdGVyUmVhZGVyJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2VyRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyOiBJQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciA9IG5ldyBDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyKCk7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXJzOiB7W2NhdGVnb3J5OiBzdHJpbmddOiBJTG9nZ2VyfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBfYXBwZW5kZXJzOiBBcHBlbmRlcnMgPSBuZXcgQXBwZW5kZXJzKCk7XG4gIHByaXZhdGUgc3RhdGljIF90aHJlc2hvbGQ6IExvZ2dpbmdUaHJlc2hvbGQgPSBuZXcgTG9nZ2luZ1RocmVzaG9sZCgpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IG5ldyBUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5cbiAgc3RhdGljIGdldCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uKCk6IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll90ZWxlbWV0cnlDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgc3RhdGljIGdldExvZ2dlcihjYXRlZ29yeTogc3RyaW5nKTogSUxvZ2dlciB7XG4gICAgaWYgKHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNhdGVnb3J5ID0gJ1NESyc7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5fbG9nZ2Vyc1tjYXRlZ29yeV07XG5cbiAgICBpZiAobG9nZ2VyKSB7XG4gICAgICByZXR1cm4gbG9nZ2VyO1xuICAgIH1cblxuICAgIHJldHVybiBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XSA9IG5ldyBMb2dnZXIoY2F0ZWdvcnksIHRoaXMuX2FwcGVuZGVycywgdGhpcy5fdGhyZXNob2xkKTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlMb2dnaW5nTGV2ZWwoKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ2NvbnNvbGUnLCBMb2dnZXJGYWN0b3J5LmFwcGx5Q29uc29sZUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgICBMb2dnZXJGYWN0b3J5LmFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwoJ3RlbGVtZXRyeScsIExvZ2dlckZhY3RvcnkuYXBwbHlUZWxlbWV0cnlMb2dnZXIuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUxvZ2dpbmdMZXZlbCgpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1sb2dnaW5nLWxldmVsJyk7XG5cbiAgICBpZiAoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSkge1xuICAgICAgdGhpcy5fdGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsKG5hbWU6IHN0cmluZywgYXBwbHlBcHBlbmRlcjogKGxldmVsOiBMb2dnaW5nTGV2ZWwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJWYWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoYHBoZW5peC0ke25hbWV9LWxvZ2dpbmctbGV2ZWxgKTtcblxuICAgIGlmIChwYXJhbWV0ZXJWYWx1ZSA9PT0gJ09mZicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhcHBseUFwcGVuZGVyKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlDb25zb2xlTG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBDb25zb2xlQXBwZW5kZXIobGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5VGVsZW1ldHJ5TG9nZ2VyKGxldmVsOiBMb2dnaW5nTGV2ZWwpOiB2b2lkIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IGxldmVsIHx8IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWw7XG5cbiAgICB0aGlzLl9hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9nZ2VyRmFjdG9yeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbCwgTG9nZ2luZ0xldmVsVHlwZX0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnaW5nTGV2ZWxNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUobG9nZ2luZ0xldmVsOiBMb2dnaW5nTGV2ZWwpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbCkge1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5UcmFjZTpcbiAgICAgICAgcmV0dXJuICdUcmFjZSc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5EZWJ1ZzpcbiAgICAgICAgcmV0dXJuICdEZWJ1Zyc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5JbmZvOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLldhcm46XG4gICAgICAgIHJldHVybiAnV2Fybic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5FcnJvcjpcbiAgICAgICAgcmV0dXJuICdFcnJvcic7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5GYXRhbDpcbiAgICAgICAgcmV0dXJuICdGYXRhbCc7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwobG9nZ2luZ0xldmVsVHlwZTogTG9nZ2luZ0xldmVsVHlwZSk6IExvZ2dpbmdMZXZlbCB7XG4gICAgc3dpdGNoIChsb2dnaW5nTGV2ZWxUeXBlKSB7XG4gICAgICBjYXNlICdPZmYnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLk9mZjtcbiAgICAgIGNhc2UgJ1RyYWNlJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5UcmFjZTtcbiAgICAgIGNhc2UgJ0RlYnVnJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5EZWJ1ZztcbiAgICAgIGNhc2UgJ0luZm8nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkluZm87XG4gICAgICBjYXNlICdXYXJuJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5XYXJuO1xuICAgICAgY2FzZSAnRXJyb3InOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkVycm9yO1xuICAgICAgY2FzZSAnRmF0YWwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkZhdGFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIExvZ2dpbmdMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShsb2dnaW5nTGV2ZWxUeXBlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdUaHJlc2hvbGQge1xuICBwcml2YXRlIF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCA9IExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWw7XG5cbiAgZ2V0IHZhbHVlKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldFRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY1R5cGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzVHlwZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzOiBNZXRyaWNzVHlwZSkge1xuICAgIHRoaXMuX21ldHJpY3MgPSBtZXRyaWNzO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNZXRyaWNzVHlwZVt0aGlzLl9tZXRyaWNzXTtcbiAgfVxuXG4gIGdldFRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsIHtcbiAgICBzd2l0Y2ggKHRoaXMuX21ldHJpY3MpIHtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU3RhbGxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQnVmZmVyaW5nOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cENvbXBsZXRlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWU6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25CYWNrZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fbWV0cmljcyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IFVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IEV4cG9uZW50aWFsQmFja29mZiBmcm9tICcuLi90aW1lL0V4cG9uZW50aWFsQmFja29mZic7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vc2RrL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IE1ldHJpY3NDb25maWd1cmF0aW9uIGZyb20gJy4vTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi9NZXRyaWNUeXBlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDEwMjQ7XG5jb25zdCBtYXhCdWZmZXJlZFJlY29yZHMgPSAyMDQ4O1xuXG5pbnRlcmZhY2UgSVZhbHVlIHtcbiAgc3RyaW5nPzogc3RyaW5nO1xuICB1aW50NjQ/OiBudW1iZXI7XG4gIGZsb2F0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBzdHJlYW1JZDogc3RyaW5nO1xuICBtZXRyaWM6IHN0cmluZztcbiAgdmFsdWU6IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZTogSVZhbHVlO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJTWV0cmljIHtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlO1xuICB2YWx1ZT86IElWYWx1ZTtcbiAgcHJldmlvdXNWYWx1ZT86IElWYWx1ZTtcbiAgcnVudGltZTogbnVtYmVyO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAga2luZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignTWV0cmljc1NlcnZpY2UnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSBfbWV0cmljczogQXJyYXk8SU1ldHJpY1JlY29yZD4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9mYWlsdXJlQ291bnQgPSAwO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2VIYW5kbGVyIGZyb20gJy4vUHJvbWlzZUhhbmRsZXInO1xuXG5jbGFzcyBQcm9taXNlIHtcbiAgX3N0YXRlOiBudW1iZXI7XG4gIF9oYW5kbGVkOiBib29sZWFuO1xuICBfdmFsdWU6IFByb21pc2U7XG4gIF9kZWZlcnJlZHM6IEFycmF5PFByb21pc2VIYW5kbGVyPjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIHRoZW4ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNhbGxiYWNrKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9taXNlcyBtdXN0IGJlIGNvbnN0cnVjdGVkIHZpYSBuZXcnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdub3QgYSBmdW5jdGlvbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlID0gMDtcbiAgICB0aGlzLl9oYW5kbGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVmZXJyZWRzID0gW107XG5cbiAgICB0aGlzLmRvUmVzb2x2ZShjYWxsYmFjayk7XG4gIH1cblxuICBkb1Jlc29sdmUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgbGV0IGRvbmUgPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnByb21pc2VSZWplY3QocmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMucHJvbWlzZVJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlc29sdmUobmV3VmFsdWU6IFByb21pc2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFByb21pc2UgUmVzb2x1dGlvbiBQcm9jZWR1cmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9taXNlcy1hcGx1cy9Qcm9taXNlcy1zcGVjI3RoZS1Qcm9taXNlLXJlc29sdXRpb24tcHJvY2VkdXJlXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQSBQcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0IHNlbGYuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAodHlwZW9mIG5ld1ZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3VmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHRoZW4gPSBuZXdWYWx1ZS50aGVuO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICBwcm9taXNlLl9zdGF0ZSA9IDM7XG4gICAgICAgICAgcHJvbWlzZS5fdmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICBwcm9taXNlLmZpbmFsZSgpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcHJvbWlzZS5kb1Jlc29sdmUoZnVuY3Rpb24oKTogdm9pZCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICAgICAgICB0aGVuLmFwcGx5KG5ld1ZhbHVlLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N0YXRlID0gMTtcbiAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBwcm9taXNlLmZpbmFsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByb21pc2UucHJvbWlzZVJlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlUmVqZWN0KG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdGUgPSAyO1xuICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy5maW5hbGUoKTtcbiAgfVxuXG4gIGZpbmFsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IDIgJiYgdGhpcy5fZGVmZXJyZWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGVkKSB7XG4gICAgICAgICAgUHJvbWlzZS5fdW5oYW5kbGVkUmVqZWN0aW9uKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuX2RlZmVycmVkcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5oYW5kbGUodGhpcy5fZGVmZXJyZWRzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kZWZlcnJlZHMgPSBudWxsO1xuICB9XG5cbiAgaGFuZGxlKGRlZmVycmVkOiBQcm9taXNlSGFuZGxlcik6IHZvaWQge1xuICAgIGxldCBwcm9taXNlID0gdGhpcyBhcyBQcm9taXNlO1xuXG4gICAgd2hpbGUgKHByb21pc2UuX3N0YXRlID09PSAzKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS5fdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSAwKSB7XG4gICAgICBwcm9taXNlLl9kZWZlcnJlZHMucHVzaChkZWZlcnJlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9taXNlLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICBQcm9taXNlLl9pbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2sgPSBwcm9taXNlLl9zdGF0ZSA9PT0gMSA/IGRlZmVycmVkLm9uRnVsZmlsbGVkIDogZGVmZXJyZWQub25SZWplY3RlZDtcblxuICAgICAgaWYgKGNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMSkge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChwcm9taXNlLl92YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVqZWN0KGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGVmZXJyZWQucHJvbWlzZS5wcm9taXNlUmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFsbChhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5hbGwgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycik7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XG4gICAgICB9XG5cbiAgICAgIGxldCByZW1haW5pbmcgPSBhcmdzLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1hbmFnZVJlc3BvbnNlID0gKGksIHZhbHVlKTogdm9pZCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRoZW4gPSB2YWx1ZS50aGVuO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgdGhlbi5jYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlID0+IG1hbmFnZVJlc3BvbnNlKGksIHZhbHVlKSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJnc1tpXSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKC0tcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWFuYWdlUmVzcG9uc2UoaSwgYXJnc1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZSh2YWx1ZSk6IFByb21pc2Uge1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcmVzb2x2ZSh2YWx1ZSkpO1xuICB9XG5cbiAgc3RhdGljIHJlamVjdCh2YWx1ZSk6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiByZWplY3QodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByYWNlKGFycjogQXJyYXk8UHJvbWlzZT4pOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdQcm9taXNlLnJhY2UgYWNjZXB0cyBhbiBhcnJheScpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYXJyW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgX2ltbWVkaWF0ZShjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBpZ25vcmVkID0gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gIH1cblxuICBzdGF0aWMgX3VuaGFuZGxlZFJlamVjdGlvbihlcnJvcik6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZSkge1xuICAgICAgY29uc29sZS53YXJuKCdQb3NzaWJsZSBVbmhhbmRsZWQgUHJvbWlzZSBSZWplY3Rpb246JywgZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbJ2NhdGNoJ10gPSBmdW5jdGlvbihvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlWyd0aGVuJ10gPSBmdW5jdGlvbihvbkZ1bGZpbGxlZDogRnVuY3Rpb24sIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoKCkgPT4gbnVsbCk7XG5cbiAgdGhpcy5oYW5kbGUobmV3IFByb21pc2VIYW5kbGVyKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSk7XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddID0gZnVuY3Rpb24oY2FsbGJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZSB8IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICB2YWx1ZSA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gdmFsdWUpLFxuICAgIHJlYXNvbiA9PiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oKCkgPT4gY29uc3RydWN0b3IucmVqZWN0KHJlYXNvbikpXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBQcm9taXNlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFByb21pc2UgZnJvbSAnLi9Qcm9taXNlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJvbWlzZUhhbmRsZXIge1xuICBvbkZ1bGZpbGxlZDogRnVuY3Rpb247XG4gIG9uUmVqZWN0ZWQ6IEZ1bmN0aW9uO1xuICBwcm9taXNlOiBQcm9taXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBwcm9taXNlKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogbnVsbDtcbiAgICB0aGlzLm9uUmVqZWN0ZWQgPSB0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJyA/IG9uUmVqZWN0ZWQgOiBudWxsO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdCB7XG4gIGF1ZGlvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgdmlkZW9UcmFuc2NlaXZlcj86IFJUQ1J0cFRyYW5zY2VpdmVyO1xuICBwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBsb2NhbE9mZmVyOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1BlZXJDb25uZWN0aW9uU2VydmljZScpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcGVlckNvbm5lY3Rpb25GYWN0b3J5OiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+ID0gbmV3IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4obmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSk7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZWQ6IHtcbiAgICBkaXJlY3Rpb24/OiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjtcbiAgICBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQ+O1xuICB9O1xuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1ByZWNhY2hpbmdFbmFibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IFBlZXJDb25uZWN0aW9uU2VydmljZS5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHJlLWNhY2hlIHBlZXIgY29ubmVjdGlvbiBvZmZlcicsIGUpKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKCk6IFByb21pc2U8eyBwZWVyQ29ubmVjdGlvbjogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb25PZmZlckluaXQgfCB2b2lkPjsgZGlyZWN0aW9uOiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB9PiB7XG4gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0ge1xuICAgICAgZGlyZWN0aW9uOiAncmVjdm9ubHknLFxuICAgICAgcGVlckNvbm5lY3Rpb246IFBlZXJDb25uZWN0aW9uU2VydmljZS5jcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKClcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyKGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gPSAncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgPSBmYWxzZSk6IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PiB7XG4gICAgaWYgKFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkICYmIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLmRpcmVjdGlvbiA9PT0gZGlyZWN0aW9uICYmICFlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9jYWNoZWQucGVlckNvbm5lY3Rpb247XG5cbiAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkID0gbnVsbDtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfTtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNkcFBhcnNlciBmcm9tICcuL1NkcFBhcnNlcic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y01vbml0b3JTdGF0aXN0aWMge1xuICBba2luZDogc3RyaW5nXTogSVJ0Y1N0YXRpc3RpYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnQge1xuICByZXN1bHQ6ICgpID0+IElMZWdhY3lSVENTdGF0c1JlcG9ydEl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtIGV4dGVuZHMgUlRDU3RhdHNSZXBvcnQge1xuICB0eXBlOiBzdHJpbmc7XG4gIG5hbWVzOiAoKSA9PiBzdHJpbmdbXTtcbiAgc3RhdDogKG5hbWUpID0+IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUnRjU3RhdGlzdGljIHtcbiAgc3NyYz86IHN0cmluZztcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgYml0cmF0ZT86IG51bWJlcjtcbiAgYnl0ZXNSZWNlaXZlZD86IG51bWJlcjtcbiAgZnJhbWVzRGVjb2RlZD86IG51bWJlcjtcbiAgcGFja2V0c0xvc3Q/OiBudW1iZXI7XG4gIHBhY2tldHNSZWNlaXZlZD86IG51bWJlcjtcbiAgY29kZWM/OiBzdHJpbmc7XG4gIGZwcz86IG51bWJlcjtcbiAgcm91bmRUcmlwVGltZT86IG51bWJlcjtcbiAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG5jb25zdCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0ID0gMTAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29ubmVjdGlvbk1vbml0b3IgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkVmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRBdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0Y1N0YXRpc3RpYzogU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4gPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4oe30pO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uO1xuICBwcml2YXRlIF9pc01vbml0b3JSdW5uaW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfdXBkYXRlVGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIF90cmFja3NUb01vbml0b3I6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSwgZXN0aW1hdGVkUm91bmRUcmlwVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBwZWVyQ29ubmVjdGlvbjtcbiAgICB0aGlzLl9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lID0gZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICB0aGlzLl90cmFja3NUb01vbml0b3IgPSBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5tYXAodHJhY2sgPT4gdHJhY2sua2luZCkgfHwgW107XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU0RQID0gbmV3IFNkcFBhcnNlcih0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjID0gcGFyc2VkU0RQLmF1ZGlvQ29kZWM7XG4gICAgICAgIHRoaXMuX2VzdGltYXRlZFZpZGVvQ29kZWMgPSBwYXJzZWRTRFAudmlkZW9Db2RlYztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVTdGF0aXN0aWMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljKCk6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcnRjU3RhdGlzdGljO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc01vbml0b3JSdW5uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VwZGF0ZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5nZXRTdGF0c1Byb21pc2VCYXNlZERpc2FibGVkKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy51cGRhdGVTdGF0aXN0aWNMZWdhY3koKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNhZmFyaSAxMSBkb2VzbnQgaGF2ZSBraW5kIG9yIG1lZGlhVHlwZSBzbyB3ZSBuZWVkIHRvIHRha2UgaXQgZnJvbSB0aGUgaW5ib3VuZC1ydHAgb2JqZWN0IGlkXG4gICAgY29uc3QgZ2V0S2luZEZvclNhZmFyaTExID0gKGl0ZW0pOiBzdHJpbmcgPT4gaXRlbS5pZC5pbmNsdWRlcygnQXVkaW8nKSA/ICdhdWRpbycgOiBpdGVtLmlkLmluY2x1ZGVzKCdWaWRlbycpID8gJ3ZpZGVvJyA6ICcnO1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhudWxsKVxuICAgICAgLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgICBjb25zdCBydGNTdGF0aXN0aWNzOiBJUnRjTW9uaXRvclN0YXRpc3RpYyA9IHt9O1xuXG4gICAgICAgIGlmIChzdGF0cykge1xuICAgICAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcbiAgICAgICAgICBsZXQgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuXG4gICAgICAgICAgc3RhdHMuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSkge1xuICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lID0gcmVwb3J0LmN1cnJlbnRSb3VuZFRyaXBUaW1lICogMTAwMDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1sndmlkZW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10ucm91bmRUcmlwVGltZSA9IHJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnY2FuZGlkYXRlLXBhaXInICYmIHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgICAgICBpZiAocnRjU3RhdGlzdGljc1snYXVkaW8nXSkge1xuICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gbGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdpbmJvdW5kLXJ0cCcpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2luZCA9IHJlcG9ydC5raW5kIHx8IHJlcG9ydC5tZWRpYVR5cGUgfHwgZ2V0S2luZEZvclNhZmFyaTExKHJlcG9ydCk7XG4gICAgICAgICAgICAgIGxldCBjb2RlYyA9ICcnO1xuXG4gICAgICAgICAgICAgIHN0YXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHJlcG9ydC5jb2RlY0lkKSB7XG4gICAgICAgICAgICAgICAgICBjb2RlYyA9IGl0ZW0ubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoa2luZCAmJiB0aGlzLl90cmFja3NUb01vbml0b3IuaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcG9ydC5ieXRlc1JlY2VpdmVkIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNCeXRlc1JlY2VpdmVkID0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlPy5ba2luZF0/LmJ5dGVzUmVjZWl2ZWQgPz8gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc0RlbHRhID0gYnl0ZXMgLSBwcmV2aW91c0J5dGVzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZURlbHRhID0gcmVwb3J0LnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy50aW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgY29uc3QgYml0cmF0ZSA9IGJ5dGVzRGVsdGEgJiYgdGltZURlbHRhID8gTWF0aC5mbG9vcig4ICogYnl0ZXNEZWx0YSAvXG4gICAgICAgICAgICAgICAgICB0aW1lRGVsdGEgKiAxMDAwKSA6IDA7XG5cbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdID0ge1xuICAgICAgICAgICAgICAgICAgc3NyYzogcmVwb3J0LnNzcmMsXG4gICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6IGtpbmQsXG4gICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IHJlcG9ydC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICBiaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgYnl0ZXNSZWNlaXZlZDogcmVwb3J0LmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICBwYWNrZXRzTG9zdDogcmVwb3J0LnBhY2tldHNMb3N0LFxuICAgICAgICAgICAgICAgICAgcGFja2V0c1JlY2VpdmVkOiByZXBvcnQucGFja2V0c1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgY29kZWM6IGNvZGVjIHx8IHRoaXMuZ2V0Q29kZWNCeVR5cGUoa2luZCksXG4gICAgICAgICAgICAgICAgICByb3VuZFRyaXBUaW1lXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIHx8IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcmFtZXNEZWNvZGVkJ10gPSByZXBvcnQuZnJhbWVzRGVjb2RlZDtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZnBzID0gKHJlcG9ydC5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3Nba2luZF0udGltZXN0YW1wIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLnRpbWVzdGFtcCkgKlxuICAgICAgICAgICAgICAgICAgICAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzW2tpbmRdWydmcHMnXSA9IGZwcyA/IE1hdGgucm91bmQoZnBzICogMTAwKSAvIDEwMCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgPSBydGNTdGF0aXN0aWNzO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc01vbml0b3JSdW5uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVTdGF0aXN0aWMoKSwgdXBkYXRlU3RhdGlzdGljVGltZW91dCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvZGVjQnlUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRBdWRpb0NvZGVjO1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZXN0aW1hdGVkVmlkZW9Db2RlYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkcFBhcnNlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NkcDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdWRpb0NvZGVjOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNBdWRpb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNWaWRlb1RyYWNrRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzZHA6IHN0cmluZykge1xuICAgIHRoaXMuX3NkcCA9IHNkcDtcblxuICAgIGNvbnN0IHNkcFNwbGl0QnlMaW5lcyA9IHRoaXMuX3NkcC5zcGxpdCgvKFxcclxcbnxcXHJ8XFxuKS8pO1xuICAgIGNvbnN0IHNkcFNwbGl0QnlUcmFja3MgPSB0aGlzLl9zZHAuc3BsaXQoJ209Jyk7XG5cbiAgICB0aGlzLl9hdWRpb0NvZGVjID0gdGhpcy5hcHBseUNvZGVjKCdhdWRpbycsIHNkcFNwbGl0QnlMaW5lcyk7XG4gICAgdGhpcy5fdmlkZW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygndmlkZW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCdhdWRpbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICAgIHRoaXMuX2lzVmlkZW9UcmFja0VuYWJsZWQgPSB0aGlzLmlzVHJhY2tCeVR5cGVFbmFibGVkKCd2aWRlbycsIHNkcFNwbGl0QnlUcmFja3MpO1xuICB9XG5cbiAgZ2V0IGF1ZGlvQ29kZWMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Db2RlYztcbiAgfVxuXG4gIGdldCB2aWRlb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvQ29kZWM7XG4gIH1cblxuICBnZXQgaXNBdWRpb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNBdWRpb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIGdldCBpc1ZpZGVvVHJhY2tFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyYWNrQnlUeXBlRW5hYmxlZCh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlUcmFja3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2RwU2VjdGlvbkZvclR5cGUgPSBzZHBTcGxpdEJ5VHJhY2tzLmZpbmQoc2RwVHJhY2sgPT4gc2RwVHJhY2suc3RhcnRzV2l0aCh0eXBlKSk7XG5cbiAgICBpZiAoIXNkcFNlY3Rpb25Gb3JUeXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICFzZHBTZWN0aW9uRm9yVHlwZS5pbmNsdWRlcyhgYT1pbmFjdGl2ZWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvZGVjKHR5cGU6IHN0cmluZywgc2RwU3BsaXRCeUxpbmVzOiBzdHJpbmcgW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZWRDb2RlY0xpbmUgPSBzZHBTcGxpdEJ5TGluZXMuZmluZChzZHBMaW5lID0+IHNkcExpbmUuaW5jbHVkZXMoYGE9cnRwbWFwOiR7c2RwU3BsaXRCeUxpbmVzLmZpbmQoaSA9PiBpLmluY2x1ZGVzKGBtPSR7dHlwZX1gKSkuc3BsaXQoJyAnKVszXX1gKSk7XG4gICAgY29uc3QgdXNlZENvZGVjID0gdXNlZENvZGVjTGluZS5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGNvZGVjTmFtZSA9IHVzZWRDb2RlYy5zcGxpdCgnLycpWzBdO1xuXG4gICAgcmV0dXJuIGNvZGVjTmFtZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiwge1BlZXJDb25uZWN0aW9uRXZlbnRzfSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCB7SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0fSBmcm9tICcuL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcblxuY2xhc3MgVmFuaWxsYVBlZXJDb25uZWN0aW9uIGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1ZhbmlsbGFQZWVyQ29ubmVjdGlvbicpO1xuICBwcml2YXRlIF9wZWVyQ29ubmVjdGlvbjogUlRDUGVlckNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQud2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiBjbGFzcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBnZXQgbmF0aXZlKCk6IFJUQ1BlZXJDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24oKTogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uU3RhdGUoKTogUlRDUGVlckNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBpY2VDb25uZWN0aW9uU3RhdGUoKTogUlRDSWNlQ29ubmVjdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0Q29uZmlndXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhRmVhdHVyZUVuYWJsZW1lbnQuYWRkVHJhbmNlaXZlckRpc2FibGVkICYmIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU9mZmVyKG9wdGlvbnM/OiBSVENPZmZlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZU9mZmVyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHJlc29sdmUsIHJlamVjdCwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFuc3dlcihvcHRpb25zPzogUlRDQW5zd2VyT3B0aW9ucyk6IFByb21pc2U8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdD4ge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgY3JlYXRlQW5zd2VyIG1ldGhvZCB3aXRoIGNhbGxiYWNrcyBpcyBkZXByZWNhdGVkXG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgc2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBoYXNDcnlwdG8gPSBkZXNjcmlwdGlvbi5zZHA/Lm1hdGNoKC9hPWNyeXB0bzovaSk7XG5cbiAgICBpZiAoaGFzQ3J5cHRvKSB7XG4gICAgICB0aGlzLl9sb2dnZXIud2FybignU0RQIGE9Y3J5cHRvIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQgP1xuICAgICAgbmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbikgOiBkZXNjcmlwdGlvbik7XG4gIH1cblxuICBnZXRTZW5kZXJzKCk6IFJUQ1J0cFNlbmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpO1xuICB9XG5cbiAgZ2V0UmVjZWl2ZXJzKCk6IFJUQ1J0cFJlY2VpdmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRSZWNlaXZlcnMoKTtcbiAgfVxuXG4gIGdldFN0YXRzKHNlbGVjdG9yPzogTWVkaWFTdHJlYW1UcmFjayB8IG51bGwpOiBQcm9taXNlPFJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHNlbGVjdG9yKTtcbiAgfVxuXG4gIGdldFN0YXRzTGVnYWN5KCk6IFByb21pc2U8SUxlZ2FjeVJUQ1N0YXRzUmVwb3J0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgLy8gSWdub3JlZCBkdWUgdG8gdHlwZXNjcmlwdCBub3QgaGF2aW5nIGxlZ2FjeSAnZ2V0U3RhdHMnIG1ldGhvZCB0eXBlIGRlZmluaXRpb25cbiAgICAgIC8vIFRoaXMgd2FzIGEgQ2hyb21lIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnZ2V0U3RhdHMnIG1ldGhvZCBmb3JcbiAgICAgIC8vIENocm9tZUA8PSA2NiBkZXRhaWxlZCBoZXJlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02Mjc4MTZcbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRFdmVudExpc3RlbmVyKHR5cGU6IFBlZXJDb25uZWN0aW9uRXZlbnRzLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFRyYW5zY2VpdmVyKG5hbWU6IHN0cmluZywgb3B0aW9uczogUlRDUnRwVHJhbnNjZWl2ZXJJbml0KTogUlRDUnRwVHJhbnNjZWl2ZXIge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcihuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFkZFN0cmVhbShtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0pOiB2b2lkIHtcbiAgICBtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmFkZFRyYWNrKHRyYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb24oKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIHNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzZXQgb250cmFjayhoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjayA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb250cmFjaygpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDVHJhY2tFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub250cmFjaztcbiAgfVxuXG4gIHNldCBvbmljZWNhbmRpZGF0ZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uaWNlY2FuZGlkYXRlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZTtcbiAgfVxuXG4gIHNldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsKSB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9uY29ubmVjdGlvbnN0YXRlY2hhbmdlKCk6ICgodGhpczogUlRDUGVlckNvbm5lY3Rpb24sIGV2OiBSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIHNldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZShoYW5kbGVyOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbjsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IElQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBmcm9tICcuL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IHtcbiAgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb24oY29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiBuZXcgVmFuaWxsYVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWRPbmx5U3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YmplY3Q6IFN1YmplY3Q8VD47XG5cbiAgY29uc3RydWN0b3Ioc3ViamVjdDogU3ViamVjdDxUPikge1xuICAgIHRoaXMuX3N1YmplY3QgPSBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9zdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmNsYXNzIERpc3Bvc2FibGVMaXN0ZW5lcjxUPiBleHRlbmRzIERpc3Bvc2FibGUge1xuICBjb25zdHJ1Y3RvcihsaXN0ZW5lcnM6IEFycmF5PFQ+LCBsaXN0ZW5lcjogVCkge1xuICAgIHN1cGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJqZWN0PFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGlzdGVuZXJzOiBBcnJheTwoVCkgPT4gdm9pZD47XG4gIHByaXZhdGUgX3ZhbHVlOiBUO1xuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xuICAgIGxldCBjaGFuZ2VkID0gdGhpcy5fdmFsdWUgIT09IHZhbHVlO1xuXG4gICAgaWYgKGNoYW5nZWQgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBhcmFibGUgPSB2YWx1ZSBhcyB1bmtub3duIGFzIElDb21wYXJhYmxlPFQ+O1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBhcmFibGUuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNoYW5nZWQgPSAhY29tcGFyYWJsZS5lcXVhbHModGhpcy5fdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY2hhbmdlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG5cbiAgICB0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiB7XG4gICAgICBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyOiAoVCkgPT4gdm9pZCk6IElEaXNwb3NhYmxlIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBsaXN0ZW5lcih0aGlzLl92YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IERpc3Bvc2FibGVMaXN0ZW5lcjwoVCkgPT4gdm9pZD4odGhpcy5fbGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW52aXJvbm1lbnQge1xuICBzdGF0aWMgZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZVVSTCA9IG5ldyBVUkwodXJsKTtcblxuICAgICAgcmV0dXJuIGJhc2VVUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcblxuICAgIGNvbnN0IGlnbm9yZWRFbnZpcm9ubWVudCA9IFNESy5fZW52aXJvbm1lbnQuc3Vic2NyaWJlKGVudmlyb25tZW50ID0+IHtcbiAgICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkRGlzY292ZXJ5VXJpID0gU0RLLnRlbGVtZXRyeVVybC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5QXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBUZWxlbWV0cnlBcHBlbmRlcik7XG5cbiAgICAgIGlmICh0ZWxlbWV0cnlBcHBlbmRlcikge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSBVUkwgd2FzIHNldCB0byBbJXNdJywgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIgJiYgdGVuYW5jeSkge1xuICAgICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kgPSB0ZW5hbmN5O1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMucmVtb3ZlKHRlbGVtZXRyeUFwcGVuZGVyKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1RlbGVtZXRyeSB0ZW5hbmN5IHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSk7XG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IFNESy5fbWV0cmljc1NlcnZpY2UubWV0cmljc0NvbmZpZ3VyYXRpb247XG5cbiAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udXJsID0gdmFsdWU7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZFRlbmFuY3kgPSBTREsuX3RlbmFuY3kuc3Vic2NyaWJlKHRlbmFuY3kgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcbiAgICB9KTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1tZXRyaWNzLWxldmVsJyk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKFRlbGVtZXRyeUxldmVsW3ZhbHVlXSk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZFRlbGVtZXRyeUxldmVsID0gU0RLLl90ZWxlbWV0cnlMZXZlbC5zdWJzY3JpYmUodGVsZW1ldHJ5TGV2ZWwgPT4ge1xuICAgICAgTWV0cmljc0ZhY3Rvcnkuc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZXRyeSBvbiBmYWlsdXJlIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LWF1dG9tYXRpY2FsbHktcmVjb25uZWN0LXBlZXItY29ubmVjdGlvbicpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdBdXRvbWF0aWNhbGx5IHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24gaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCcpO1xuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0KTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtc2tpcC1nYXJiYWdlLWNvbGxlY3Rpb24tb24tbW9iaWxlLWRldmljZXMnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnU2tpcCBnYXJiYWdlIGNvbGxlY3Rpb24gb24gbW9iaWxlIGRldmljZXMgb24gcmVzdGFydCBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIFNESy5kaXNjb3ZlcnlVcmkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIFNESy50ZWxlbWV0cnlVcmwudmFsdWUgPSBTREsuZ2V0VGVsZW1ldHJ5VXJsKHZhbHVlKTtcbiAgICAgIFNESy5fZW52aXJvbm1lbnQudmFsdWUgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY2hhbm5lbFRva2VuID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWNoYW5uZWwtdG9rZW4nKTtcblxuICAgIGlmIChjaGFubmVsVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4oY2hhbm5lbFRva2VuKTtcblxuICAgICAgU0RLLl90ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3k7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Rpc2NvdmVyeSBVUkkgc2V0IGZyb20gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJpVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtdXJpJyk7XG5cbiAgICBpZiAodXJpVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmlWYWx1ZTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVVJJVmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtYmFzZS11cmknKTtcblxuICAgIGlmIChiYXNlVVJJVmFsdWUpIHtcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBgJHtiYXNlVVJJVmFsdWV9L3BjYXN0L2VuZFBvaW50c2A7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC1iYXNlLXVyaVwiIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRhZyB0byBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaW5pdChvcHRpb25zPzogSUluaXRPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbml0aWFsaXplZC52YWx1ZSkge1xuICAgICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBuZXcgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuZGlzY292ZXJ5VXJpKSB7XG4gICAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBvcHRpb25zLmRpc2NvdmVyeVVyaTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgIFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUgPSBvcHRpb25zLnBlZXJDb25uZWN0aW9uRmFjdG9yeTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwgJiYgVGVsZW1ldHJ5TGV2ZWxbb3B0aW9ucy50ZWxlbWV0cnlMZXZlbF0pIHtcbiAgICAgICAgU0RLLl90ZWxlbWV0cnlMZXZlbC52YWx1ZSA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChvcHRpb25zLnRlbGVtZXRyeUxldmVsKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubG9nZ2luZ0xldmVsICYmIExvZ2dpbmdMZXZlbFtvcHRpb25zLmxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLnRocmVzaG9sZC5zZXRUaHJlc2hvbGQoTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVHlwZVRvTG9nZ2luZ0xldmVsKG9wdGlvbnMubG9nZ2luZ0xldmVsKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgJiZcbiAgICAgICAgTG9nZ2luZ0xldmVsW29wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbF0pIHtcbiAgICAgICAgY29uc3QgY29uc29sZUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgQ29uc29sZUFwcGVuZGVyKTtcblxuICAgICAgICBpZiAoY29uc29sZUFwcGVuZGVyKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5yZW1vdmUoY29uc29sZUFwcGVuZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwgIT09ICdPZmYnKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IG9wdGlvbnMuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPSBvcHRpb25zLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fd2ViUGxheWVyTG9hZGVyID0gb3B0aW9ucy53ZWJQbGF5ZXJMb2FkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyID0gb3B0aW9ucy5zaGFrYVBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuaGxzSnNMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5faGxzSnNMb2FkZXIgPSBvcHRpb25zLmhsc0pzTG9hZGVyO1xuICAgICAgfVxuICAgIH1cblxuICAgIFNESy5faW5pdGlhbGl6ZWQudmFsdWUgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG51bGw7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGVsZW1ldHJ5VXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGVsZW1ldHJ5VXJsLmdldFRlbGVtZXRyeVVybCh1cmwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsICgpID0+IHtcbiAgU0RLLmRpc3Bvc2UoKTtcbn0pO1xuXG5TREsuYXBwbHlEaXNjb3ZlcnlVcmlEZWZhdWx0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseU1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlUZWxlbWV0cnlDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlBdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmVGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5U2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5pbml0KCk7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeVVybCB7XG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBiYXNlVVJMLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG5cbiAgICAgIHN3aXRjaCAoYmFzZVVSTC5wcm90b2NvbCkge1xuICAgICAgICBjYXNlICd3czonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cDonO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dzczonOlxuICAgICAgICAgIGJhc2VVUkwucHJvdG9jb2wgPSAnaHR0cHM6JztcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDIgfHxcbiAgICAgICAgICAoc2VnbWVudHMubGVuZ3RoID09PSAzICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDJdLmxlbmd0aCA8PSAyICYmIHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmxlbmd0aCA8PSAzKVxuICAgICAgKSB7XG4gICAgICAgIHNlZ21lbnRzLnVuc2hpZnQoJ3RlbGVtZXRyeScpO1xuICAgICAgfSBlbHNlIGlmIChzZWdtZW50c1swXS5zdGFydHNXaXRoKCdzdGctJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1zdGcnKSB8fCBzZWdtZW50c1swXS5pbmNsdWRlcygnLXN0Zy0nKSB8fCBzZWdtZW50c1swXSA9PT0gJ3N0ZycpIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5LXN0Zyc7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ2xvY2FsJykgfHwgc2VnbWVudHNbMF0uZW5kc1dpdGgoJy1sb2NhbCcpKSB7XG4gICAgICAgIC8vIExlYXZlIFVSTCB1bmNoYW5nZWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzWzBdID0gJ3RlbGVtZXRyeSc7XG4gICAgICB9XG5cbiAgICAgIGJhc2VVUkwuaG9zdG5hbWUgPSBzZWdtZW50cy5qb2luKCcuJyk7XG5cbiAgICAgIHJldHVybiBgJHtiYXNlVVJMLm9yaWdpbn0vdGVsZW1ldHJ5YDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgdHlwZSBCaXRyYXRlU3RhdGVUeXBlID0gJ0tlZXAnIHwgJ1Jlc2V0JztcbmV4cG9ydCB0eXBlIEJpdHJhdGVNb2RlVHlwZSA9ICdOb3JtYWwnIHwgJ0ZvcmNlJyB8ICdSZXNldCc7XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVTdGF0ZSB7XG4gIEtlZXAsXG4gIFJlc2V0XG59XG5cbmV4cG9ydCBlbnVtIEJpdHJhdGVNb2RlIHtcbiAgTm9ybWFsLFxuICBGb3JjZSxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUge1xuICBhcGlWZXJzaW9uOiBudW1iZXI7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICBlbGFwc2VkSW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgYml0cmF0ZUluQml0c1BlclNlY29uZDogbnVtYmVyO1xuICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZVR5cGU7XG4gIGJpdHJhdGVNb2RlOiBCaXRyYXRlTW9kZVR5cGU7XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSA9IDA7XG4gICAgICAgIH0sIGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi5zdWJzY3JpYmUocmVzb2x1dGlvbiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb1RlbGVtZXRyeSkge1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5Lm9uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlcyhyZXNvbHV0aW9uLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC5zdWJzY3JpYmUoYml0cmF0ZUxpbWl0ID0+IHtcbiAgICAgICAgaWYgKGJpdHJhdGVMaW1pdCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgYml0cmF0ZUxpbWl0LFxuICAgICAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgICAgICBCaXRyYXRlTW9kZS5Ob3JtYWxcbiAgICAgICAgICApXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGVzdHJveVN0cmVhbU9uVW5tb3VudCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW1PblVubW91bnQodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCAnY2xpZW50OnRlcm1pbmF0aW9uLW9uLXdpbmRvdy11bmxvYWQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIGRlc3Ryb3lTdHJlYW1PblVubW91bnQpO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSA9IHZpZGVvRWxlbWVudDtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICh2aWRlb0VsZW1lbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlc29sdXRpb24udmFsdWUud2lkdGggIT09IHZpZGVvRWxlbWVudC52aWRlb1dpZHRoIHx8IHRoaXMucmVzb2x1dGlvbi52YWx1ZS5oZWlnaHQgIT09IHZpZGVvRWxlbWVudC52aWRlb0hlaWdodCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gbmV3IERpbWVuc2lvbih2aWRlb0VsZW1lbnQudmlkZW9XaWR0aCwgdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVzb2x1dGlvbi52YWx1ZSA9IERpbWVuc2lvbi5lbXB0eTtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9rZW4oKTogRW5jb2RlZEVkZ2VUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZTtcbiAgfVxuXG4gIHNldCB0b2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSA9IHRva2VuO1xuICAgIHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSk7XG4gICAgY29uc3QgZGlzY292ZXJ5VXJpID0gKGVkZ2VUb2tlbi51cmkgfHwgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSkudG9TdHJpbmcoKTtcblxuICAgIFNESy50ZW5hbmN5LnZhbHVlID0gZWRnZVRva2VuLnRlbmFuY3kgfHwgU0RLLnRlbmFuY3kudmFsdWU7XG4gICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IGRpc2NvdmVyeVVyaTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gTWV0cmljc0ZhY3RvcnkuZ2V0TWV0cmljc1NlcnZpY2UoZGlzY292ZXJ5VXJpKTtcblxuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgPSBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKTtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2VuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zJyk7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBnZXQgcGVlckNvbm5lY3Rpb24oKTogUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IFJlYWRPbmx5U3ViamVjdDxDaGFubmVsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBhdXRvTXV0ZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQ7XG4gIH1cblxuICBnZXQgYXV0b1BhdXNlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9QYXVzZWQ7XG4gIH1cblxuICBnZXQgdG9rZW5FeHBpcmluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmc7XG4gIH1cblxuICBnZXQgYXV0aG9yaXplZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQ7XG4gIH1cblxuICBnZXQgb25saW5lKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5T25saW5lO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlMb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHBsYXlpbmcoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlQbGF5aW5nO1xuICB9XG5cbiAgZ2V0IHN0YW5kYnkoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdGFuZGJ5O1xuICB9XG5cbiAgZ2V0IHN0b3BwZWQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdG9wcGVkO1xuICB9XG5cbiAgZ2V0IHRhcmdldExhZygpOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWc7XG4gIH1cblxuICBnZXQgbGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxhZztcbiAgfVxuXG4gIGdldCBiaXRyYXRlTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlCaXRyYXRlTGltaXQudmFsdWU7XG4gIH1cblxuICBnZXQgcmVzb2x1dGlvbigpOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UmVzb2x1dGlvbjtcbiAgfVxuXG4gIGdldCBmYWlsdXJlQ291bnQoKTogUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUZhaWx1cmVDb3VudDtcbiAgfVxuXG4gIGdldCBlbmRQb2ludCgpOiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlFbmRQb2ludDtcbiAgfVxuXG4gIGdldCBzdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlTdHJlYW07XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQ7XG4gIH1cblxuICBnZXQgcnRjU3RhdGlzdGljcygpOiBSZWFkT25seVN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSdGNTdGF0aXN0aWNzO1xuICB9XG5cbiAgZ2V0IG1lZGlhU3RyZWFtKCk6IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc2V0Qml0cmF0ZUxpbWl0KGJpdHJhdGVMaW1pdDogQml0c1BlclNlY29uZCk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IGJpdHJhdGVMaW1pdDtcbiAgfVxuXG4gIGNsZWFyQml0cmF0ZUxpbWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlKSB7XG4gICAgICBjb25zdCBlbGFwc2VkSW5NaWxsaXNlY29uZHMgPSBEYXRlLm5vdygpIC0gdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbEluaXRpYWxpemF0aW9uLmdldFRpbWUoKTtcbiAgICAgIGNvbnN0IGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQgPSAwO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmxpbWl0Qml0cmF0ZShcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLFxuICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICAgIEJpdHJhdGVTdGF0ZS5LZWVwLFxuICAgICAgICBCaXRyYXRlTW9kZS5SZXNldFxuICAgICAgKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5iaXRyYXRlTGltaXQudmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc2V0dGluZyBsaW1pdCBiaXRyYXRlJywgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVRhcmdldExhZyhsYWc6IE1pbGxpc2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnLnZhbHVlID0gbGFnO1xuICB9XG5cbiAgYXN5bmMgc3RvcChyZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGlmICghdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnN1YnNjcmliZShpc1N0YXJ0aW5nID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXJ0aW5nKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RvcChyZWFzb24pO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU3RvcChyZWFzb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMocmVhc29uKTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gIH1cblxuICBhc3luYyByZXN1bWUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1bm11dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3AoJ2NsaWVudDpjaGFubmVsLWRpc3Bvc2UnKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmkodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pOiBVUkwge1xuICAgIGNvbnN0IHVybCA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnVyaTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBkaXNjb3ZlciBVUkkgWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgc3RhcnQnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NTdGFydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4gPSB0aGlzLl90b2tlbkNvbnRleHQudG9rZW4udmFsdWU7XG4gICAgY29uc3QgbGlzdGVuT25TdHJlYW1TZXR1cCA9IHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkubGlzdGVuT25TdHJlYW1TZXR1cCgpO1xuXG4gICAgaWYgKCFFZGdlQXV0aFBhcnNlci5pc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IFN0cmVhbVRyYWNrVHJhbnNmb3JtLnZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybSgndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ2F1ZGlvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygndmlkZW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBFbmNvZGVkU3RyZWFtU2luay52YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUgJiYgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBpbnNlcnRhYmxlLXN0cmVhbXMgYW5kIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGFyZSBlbmFibGVkLCBvbmx5IHVzZSBvbmUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPT09ICdmdW5jdGlvbic7XG4gICAgY29uc3QgaGFzRW5jb2RlZFN0cmVhbVNpbmsgPSB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2sgJiYgaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQm90aCBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGNhbGxiYWNrIGFuZCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMgc2luayBmdW5jdGlvbiBmb3VuZCwgb25seSB1c2Ugb25lIHR5cGUgb3IgdGhlIG90aGVyJyk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYSBTdHJlYW0gVHJhY2sgQVBJJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBpbnNlcnRhYmxlLXN0cmVhbXMgaXMgZW5hYmxlZCcpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjaykge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENyZWF0ZUNoYW5uZWxPcHRpb25zIHRyYW5zZm9ybSBjYWxsYmFjayBmdW5jdGlvbiBmb3VuZDsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QbGF5aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwbGF5aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBhdXNlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgcGF1c2VkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIGludm9rZSBwbGF5KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgYWxyZWFkeSBzdGFydGluZywgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQnKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHN0b3BwZWQgZHVlIHRvIHVuc3VwcG9ydGVkIGZlYXR1cmUsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LicpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gY29uZmlndXJhdGlvbiBlcnJvciwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuVXBSZXNvdXJjZXMocmVhc29uOiBzdHJpbmcgPSBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24pOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCBwZWVyQ29ubmVjdGlvbiA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZTtcblxuICAgIGlmIChwZWVyQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gbnVsbDtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUuZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkudmFsdWUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5kZXN0cm95U3RyZWFtKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSwgcmVhc29uKVxuICAgICAgICAudGhlbigoe3N0YXR1c30pID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gZGVzdHJveSBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBEZXN0cm95ZWQgc3RyZWFtIHdpdGggcmVhc29uIFslc10nLCB0aGlzLnN0cmVhbUlkLCBzdGF0dXMpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbScsIHRoaXMuc3RyZWFtSWQsIGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQgJiYgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgIHRoaXMudmlkZW9FbGVtZW50LmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtOiBNZWRpYVN0cmVhbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZpZGVvRWxlbWVudCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZTtcblxuICAgIGlmICghdmlkZW9FbGVtZW50KSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgfVxuXG4gICAgY29uc3QgcGxheVByb21pc2UgPSB2aWRlb0VsZW1lbnQucGxheSgpO1xuXG4gICAgaWYgKHBsYXlQcm9taXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBsYXlQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICBjb25zdCBoYXNBdWRpb1RyYWNrID0gISFtZWRpYVN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIodHJhY2sgPT4ge1xuICAgICAgICByZXR1cm4gdHJhY2sua2luZCA9PT0gJ2F1ZGlvJztcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBQYXVzZWQgdmlkZW8gYWZ0ZXIgcGxheSBmYWlsZWQuIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IG11dGVkIHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdmlkZW9FbGVtZW50LnBsYXkoKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGxheWVkIHZpZGVvIGFmdGVyIGF1dG8gbXV0aW5nLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQgdG8gdW5tdXRlLicsIHRoaXMuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHZpZGVvRWxlbWVudC5tdXRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHBsYXkgdmlkZW8uIE1hbnVhbCB1c2VyIGFjdGlvbiByZXF1aXJlZC4nLCB0aGlzLnN0cmVhbUlkLCBlKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBDaGFubmVsU3RhdGUge1xuICBPZmZsaW5lID0gMSxcbiAgU3RhcnRpbmcsXG4gIFBhdXNlZCxcbiAgUGxheWluZyxcbiAgUmVjb3ZlcmluZyxcbiAgUmVjb25uZWN0aW5nLFxuICBTdGFuZEJ5LFxuICBTdG9wcGVkLFxuICBVbmF1dGhvcml6ZWQsXG4gIEdlb1Jlc3RyaWN0ZWQsXG4gIEdlb0Jsb2NrZWQsXG4gIFVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBUcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgQ2xpZW50U3RhcnRFcnJvcixcbiAgRXJyb3Jcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hhbm5lbFN0YXRlOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IENoYW5uZWwsIHtDaGFubmVsT3B0aW9uc30gZnJvbSAnLi9DaGFubmVsJztcbmltcG9ydCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxudHlwZSBDcmVhdGVDaGFubmVsT3B0aW9ucyA9IHtcbiAgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbjtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbHMge1xuICBzdGF0aWMgY3JlYXRlQ2hhbm5lbChvcHRpb25zOiBDcmVhdGVDaGFubmVsT3B0aW9ucyk6IENoYW5uZWwge1xuICAgIGlmICghU0RLLmluaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NESyBpcyBub3QgbG9hZGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5uZWxPcHRpb25zOiBDaGFubmVsT3B0aW9ucyA9IHtcbiAgICAgIHRhcmdldExhZzogb3B0aW9ucy50YXJnZXRMYWcsXG4gICAgICB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRWaWRlb1N0cmVhbVNpbmssXG4gICAgICBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBDaGFubmVsKG9wdGlvbnMudmlkZW9FbGVtZW50LCBvcHRpb25zLnRva2VuLCBjaGFubmVsT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbHMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5TdGFydGluZyk7XG4gICAgdGhpcy5hdXRvTXV0ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5hdXRvUGF1c2VkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0aG9yaXplZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMub25saW5lID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMucGxheWluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnN0YW5kYnkgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdG9wcGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMudGFyZ2V0TGFnID0gbmV3IFN1YmplY3Q8TWlsbGlzZWNvbmQ+KG9wdGlvbnM/LnRhcmdldExhZyA/PyBkZWZhdWx0VGFyZ2V0TGFnKTtcbiAgICB0aGlzLmxhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPigwKTtcbiAgICB0aGlzLmJpdHJhdGVMaW1pdCA9IG5ldyBTdWJqZWN0PEJpdHNQZXJTZWNvbmQ+KDApO1xuICAgIHRoaXMucmVzb2x1dGlvbiA9IG5ldyBTdWJqZWN0PERpbWVuc2lvbj4oRGltZW5zaW9uLmVtcHR5KTtcbiAgICB0aGlzLmZhaWx1cmVDb3VudCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgdGhpcy5lbmRQb2ludCA9IG5ldyBTdWJqZWN0PEVuZFBvaW50PihudWxsKTtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBTdWJqZWN0PElTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucnRjU3RhdGlzdGljcyA9IG5ldyBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPihudWxsKTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLnZhbHVlO1xuXG4gICAgaWYgKCFzdHJlYW0pIHtcbiAgICAgIHJldHVybiAnLSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmVhbS5zdHJlYW1JZDtcbiAgfVxuXG4gIGFwcGx5U3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogdm9pZCB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICB0aGlzLmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuICAgICAgICB0aGlzLnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdGFuZGJ5LnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wcGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtLnZhbHVlID0gbnVsbDtcblxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudC52YWx1ZSAmJiB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnNlc3Npb25JZCA9IFNESy5jbGllbnRTZXNzaW9uSWQ7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC52YWx1ZS5kYXRhc2V0LnN0cmVhbUlkID0gdGhpcy5zdHJlYW1JZDtcbiAgICB9XG4gIH1cblxuICBtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICduby1zdHJlYW0nOlxuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFuZEJ5O1xuICAgICAgY2FzZSAnZ2VvLXJlc3RyaWN0ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ7XG4gICAgICBjYXNlICdnZW8tYmxvY2tlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDtcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnY2FwYWNpdHknOlxuICAgICAgY2FzZSAncmF0ZS1saW1pdGVkJzpcbiAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc7XG4gICAgICBjYXNlICdmb3JiaWRkZW4tdGFnJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICBjYXNlICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlZXJDb25uZWN0aW9uQ29udGV4dCB7XG4gIG1lZGlhU3RyZWFtOiBTdWJqZWN0PE1lZGlhU3RyZWFtPjtcbiAgcGVlckNvbm5lY3Rpb246IFN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPjtcbiAgcGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubWVkaWFTdHJlYW0gPSBuZXcgU3ViamVjdDxNZWRpYVN0cmVhbT4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvbiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj4obnVsbCk7XG4gICAgdGhpcy5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlQ29udGV4dCB7XG4gIGlzU3RhcnRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGlzRGlzcG9zZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1N0YXJ0aW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuaXNEaXNwb3NlZCA9IGZhbHNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgdHlwZSBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogYm9vbGVhbjtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybUNvbnRleHQge1xuICByZWFkb25seSBoYXNJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zOiBTdWJqZWN0PGJvb2xlYW4+O1xuICByZWFkb25seSB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBlbmNvZGVkQXVkaW9TdHJlYW1TaW5rOiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5oYXNJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4ob3B0aW9ucy5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpO1xuICAgIHRoaXMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaztcbiAgICB0aGlzLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLmF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rID0gb3B0aW9ucy5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rO1xuICAgIHRoaXMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2luaztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbkNvbnRleHQge1xuICB0b2tlbjogU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPjtcbiAgdG9rZW5FeHBpcmluZzogU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbikge1xuICAgIHRoaXMudG9rZW4gPSBuZXcgU3ViamVjdDxFbmNvZGVkRWRnZVRva2VuPih0b2tlbik7XG4gICAgdGhpcy50b2tlbkV4cGlyaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmNvbnN0IGRlZmF1bHREaXNjb3ZlcnlVcmkgPSAnaHR0cHM6Ly9wY2FzdC5waGVuaXhydHMuY29tL3BjYXN0L2VuZFBvaW50cyc7XG5cbmV4cG9ydCB7ZGVmYXVsdERpc2NvdmVyeVVyaX07IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0JpdHJhdGVNb2RlLCBCaXRyYXRlTW9kZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVNb2RlTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUpOiBCaXRyYXRlTW9kZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZU1vZGUpIHtcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuTm9ybWFsOlxuICAgICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLkZvcmNlOlxuICAgICAgICByZXR1cm4gJ0ZvcmNlJztcbiAgICAgIGNhc2UgQml0cmF0ZU1vZGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZU1vZGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlU3RhdGUsIEJpdHJhdGVTdGF0ZVR5cGV9IGZyb20gJy4uL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpdHJhdGVTdGF0ZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSk6IEJpdHJhdGVTdGF0ZVR5cGUge1xuICAgIHN3aXRjaCAoYml0cmF0ZVN0YXRlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVTdGF0ZS5LZWVwOlxuICAgICAgICByZXR1cm4gJ0tlZXAnO1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuUmVzZXQ6XG4gICAgICAgIHJldHVybiAnUmVzZXQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoYml0cmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBEaXNjb3ZlcnlTZXJ2aWNlIGZyb20gJy4vRGlzY292ZXJ5U2VydmljZSc7XG5cbmNvbnN0IGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwgPSA2MDAwMDtcblxuaW50ZXJmYWNlIElQZXJVUklFbmRwb2ludCB7IFt4OiBzdHJpbmddOiBQcm9taXNlPEVuZFBvaW50PiB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeSB7XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogSVBlclVSSUVuZHBvaW50ID0ge307XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ2xvc2VzdEVuZFBvaW50RGlzY292ZXJ5KCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmk6IFVSTCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIHJldHVybiBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzY292ZXJ5U2VydmljZSA9IG5ldyBEaXNjb3ZlcnlTZXJ2aWNlKHVyaSk7XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSBEaXNjb3ZlcnkuX2NhY2hlW3VybF0gPSBkaXNjb3ZlcnlTZXJ2aWNlLmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KCk7XG4gICAgY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9PT0gY2FjaGVkVmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgICAgICB9XG4gICAgICB9LCBkaXNjb3ZlcnlDYWNoZUludGVydmFsKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNhY2hlZFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaTogVVJMKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdKSB7XG4gICAgICBkZWxldGUgRGlzY292ZXJ5Ll9jYWNoZVt1cmxdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEaXNjb3ZlcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59XG5cbmNvbnN0IGlnbm9yZWQgPSBEaXNjb3ZlcnkucHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBNZXRyaWNzRmFjdG9yeSBmcm9tICcuLi8uLi9tZXRyaWNzL01ldHJpY3NGYWN0b3J5JztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NvdmVyeSBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIHdpdGggbm8gZGF0YSBbJHt1cmx9XWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzU3RyaW5nID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGFzU3RyaW5nLnNwbGl0KCcsJyk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBuZXcgRW5kUG9pbnQoZW5kUG9pbnQsIHRpbWVvdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50KHRpbWVvdXQ6IG51bWJlciA9IGRlZmF1bHRUaW1lb3V0KTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IERpc2NvdmVyeVVyaS5idWlsZERpc2NvdmVyeVVybCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IGVuZFBvaW50cyA9IGF3YWl0IHRoaXMuZGlzY292ZXJOZWFyYnlFbmRQb2ludHMobmV3IFVSTCh1cmwpLCB0aW1lb3V0KTtcbiAgICBsZXQgZmFpbGVkUmVxdWVzdHMgPSAwO1xuICAgIGNvbnN0IHByb3BhZ2F0ZUZhaWx1cmVJZkFsbFJlcXVlc3RzRmFpbGVkID0gKCk6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKGZhaWxlZFJlcXVlc3RzID49IGVuZFBvaW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmVqZWN0KGBEaXNjb3Zlcnkgb2YgWyR7ZW5kUG9pbnRzLmxlbmd0aH1dIGVuZHBvaW50cyBmcm9tIFske3VybH1dIGZhaWxlZCwgcHJldmVudGluZyBpdCBmcm9tIGNvbXBsZXRpbmdgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBlbmRQb2ludCA9IGF3YWl0IFByb21pc2UucmFjZShlbmRQb2ludHMubWFwKGVuZFBvaW50ID0+IGVuZFBvaW50XG4gICAgICAucGluZygpXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGluZyBlbmQgcG9pbnQgWyVzXScsIGVuZFBvaW50LCBlKTtcblxuICAgICAgICBmYWlsZWRSZXF1ZXN0cysrO1xuXG4gICAgICAgIHJldHVybiBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCgpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHRpbWUgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcmVkIGVuZCBwb2ludCBbJXNdIHdpdGggdGltZSBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSwgdGltZSk7XG4gICAgICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICAgICAgcnVudGltZTogKG5vdyAtIFNESy5wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgICAgICB2YWx1ZToge3VpbnQ2NDogdGltZSB8fCAwfSxcbiAgICAgICAgICByZXNvdXJjZTogZW5kUG9pbnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBraW5kOiAncGluZydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgICAgfSkpKTtcblxuICAgIHJldHVybiBlbmRQb2ludDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9IGZyb20gJy4uL2RlZmF1bHRzJztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3ZlcnNpb24vVmVyc2lvbk1hbmFnZXInO1xuaW1wb3J0IFBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvUGFyYW1ldGVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2ggPSBgPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyd2ZXJzaW9uJywgc2RrVmVyc2lvbl0sIFsnaW50ZW50aW9ucycsIGludGVudGlvbnNdLCBbJ18nLCBgJHtEYXRlLm5vdygpfWBdXSkudG9TdHJpbmcoKX1gO1xuXG4gICAgaWYgKHVybC5wYXRobmFtZSA9PT0gJy8nKSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSAnL3BjYXN0L2VuZFBvaW50cyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeVVyaSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpXG4gICAgICApXG4gICAgXSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykgeyAvKiBIYW5kbGUgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGluZyBmYWlsZWQgWyR7dXJsfV0gWyR7cmVzcG9uc2Uuc3RhdHVzfV1gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3VuZFRyaXBUaW1lID0gZmluaXNoZWQgLSBzdGFydDtcblxuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElTdWJzY3JpYmVSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3N1YnNjcmliZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG5cbiAgICBpZiAoZmFpbHVyZUNvdW50ID09PSAwICYmIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCBib2R5V2l0aE9mZmVyOiBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aE9mZmVyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRob3V0T2ZmZXI6IElTdWJzY3JpYmVXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHthcGlWZXJzaW9ufVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRob3V0T2ZmZXIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KVxuICAgICAgICApXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHN1YnNjcmliZScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU3Vic2NyaWJlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3ksIGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzdWJzY3JpYmUgcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgcHVibGlzaChuYW1lOiBzdHJpbmcsIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuLCBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdCwgZmFpbHVyZUNvdW50OiBudW1iZXIpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdwdWJsaXNoJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBjbGllbnRWZXJzaW9uID0gVmVyc2lvbk1hbmFnZXIuc2RrVmVyc2lvbjtcblxuICAgIGlmIChmYWlsdXJlQ291bnQgPT09IDAgJiYgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGJvZHlXaXRoT2ZmZXI6IElQdWJsaXNoV2l0aE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICB0eXBlOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi50eXBlLFxuICAgICAgICAgICAgc2RwOiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbi5zZHBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgc3RyZWFtSWQ6ICcnLFxuICAgICAgICAgIGFwaVZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHlXaXRoT2ZmZXIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keVdpdGhvdXRPZmZlcjogSVB1Ymxpc2hXaXRob3V0T2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhvdXRPZmZlcikpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgbmV3IEVycm9yKGBQdWJsaXNoIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIG5ldyBFcnJvcihgU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbicsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb1NldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHNldCByZW1vdGUgZGVzY3JpcHRpb24gcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGxpbWl0Qml0cmF0ZShcbiAgICBzdHJlYW06IElTdHJlYW0sXG4gICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzOiBudW1iZXIsXG4gICAgYml0cmF0ZUluQml0c1BlclNlY29uZDogQml0c1BlclNlY29uZCxcbiAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZSxcbiAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGUsXG4gICk6IFByb21pc2U8SVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdiaXRyYXRlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUgPSB7XG4gICAgICBhcGlWZXJzaW9uLFxuICAgICAgc2hhcmVkU2VjcmV0OiBzdHJlYW0uc2hhcmVkU2VjcmV0LFxuICAgICAgZWxhcHNlZEluTWlsbGlzZWNvbmRzLFxuICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZVN0YXRlVG9CaXRyYXRlU3RhdGVUeXBlKGJpdHJhdGVTdGF0ZSksXG4gICAgICBiaXRyYXRlTW9kZTogQml0cmF0ZU1vZGVNYXBwaW5nLmNvbnZlcnRCaXRyYXRlTW9kZVRvQml0cmF0ZU1vZGVUeXBlKGJpdHJhdGVNb2RlKVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc2V0IGxpbWl0IGJpdHJhdGUgdGltZWQnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3Qgc2V0IGxpbWl0IGJpdHJhdGUgcmVzcG9uc2UgWyVzXSBpbiBbJXNdIG1zJywgc3RhdHVzLCBmaW5pc2hlZCAtIHN0YXJ0KTtcblxuICAgIHJldHVybiB7c3RhdHVzfTtcbiAgfVxuXG4gIGFzeW5jIGFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtOiBJU3RyZWFtLCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSwgZGlzY292ZXJ5Q29tcGxldGVkOiBib29sZWFuLCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnaWNlJywgJ2NhbmRpZGF0ZXMnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElBZGRJY2VDYW5kaWRhdGVzUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICBjYW5kaWRhdGVzLFxuICAgICAgZGlzY292ZXJ5Q29tcGxldGVkLFxuICAgICAgb3B0aW9uc1xuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIGFkZCBpY2UgY2FuZGlkYXRlcycsIG5ldyBFcnJvcihgQWRkIGljZSBjYW5kaWRhdGVzIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBEZWxldGUgc3RyZWFtIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgc3RyZWFtJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBEZXN0cm95U3RyZWFtU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGRlc3Ryb3lTdHJlYW1SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnR290IGRlc3Ryb3kgc3RyZWFtIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGRlc3Ryb3lTdHJlYW1SZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbU9uVW5tb3VudChzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuYXZpZ2F0b3I/LnNlbmRCZWFjb24pIHtcbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmRlc3Ryb3lTdHJlYW0oc3RyZWFtLCByZWFzb24pO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBuYXZpZ2F0b3Iuc2VuZEJlYWNvbih1cmwsIGZvcm1EYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcmwocGF0aDogc3RyaW5nW10pOiBVUkwge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBVUkwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBwYXRoQXNBcnJheSA9IHVyaS5wYXRobmFtZS5zcGxpdCgnLycpO1xuXG4gICAgcGF0aEFzQXJyYXkubGVuZ3RoID0gcGF0aEFzQXJyYXkubGVuZ3RoIC0gMTtcblxuICAgIHVyaS5wYXRobmFtZSA9IHBhdGhBc0FycmF5LmNvbmNhdCguLi5wYXRoKS5qb2luKCcvJyk7XG5cbiAgICByZXR1cm4gdXJpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBpbmdVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3Qgc2RrVmVyc2lvbiA9IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb247XG4gICAgY29uc3QgaW50ZW50aW9ucyA9IFBhcmFtZXRlcnMuZGlzY292ZXJ5UGFyYW1ldGVycy5pbnRlbnRpb25zO1xuXG4gICAgdXJpLnNlYXJjaCA9IGA/JHtuZXcgVVJMU2VhcmNoUGFyYW1zKFtbJ3R5cGUnLCAnaHR0cCddLCBbJ3ZlcnNpb24nLCBzZGtWZXJzaW9uXSwgWydpbnRlbnRpb25zJywgaW50ZW50aW9uc10sIFsnXycsIGAke0RhdGUubm93KCl9YF1dKS50b1N0cmluZygpfWA7XG5cbiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogUHVibGlzaFN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDY6XG4gICAgICAgIHJldHVybiAnbWlzc2luZy1jaGFubmVsLW9yLXJvb20taWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TdWJzY3JpYmVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU3Vic2NyaWJlU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwMjpcbiAgICAgICAgcmV0dXJuICdnZW8tcmVzdHJpY3RlZCc7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuICdnZW8tYmxvY2tlZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4gJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJztcbiAgICAgIGNhc2UgNDE1OlxuICAgICAgICByZXR1cm4gJ2ZvcmJpZGRlbi10YWcnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXREZXN0cm95U3RyZWFtU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IERlc3Ryb3lTdHJlYW1TdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlKHRlbmFuY3k6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU3Vic2NyaWJlUmVzcG9uc2U7XG4gICAgY29uc3Qgc3Vic2NyaWJlUmVzcG9uc2U6IElTdWJzY3JpYmVSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIHN1YnNjcmliZVJlc3BvbnNlLmxhZyA9IGRhdGEubGFnO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBzdWJzY3JpYmVSZXNwb25zZS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb1B1Ymxpc2hSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElQdWJsaXNoUmVzcG9uc2U7XG4gICAgY29uc3QgcHVibGlzaFJlc3BvbnNlOiBJUHVibGlzaFJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHB1Ymxpc2hSZXNwb25zZS5zdHJlYW0gPSB7XG4gICAgICB0ZW5hbmN5LFxuICAgICAgc3RyZWFtSWQ6IGRhdGEuc3RyZWFtSWQsXG4gICAgICBzaGFyZWRTZWNyZXQ6IGRhdGEuc2hhcmVkU2VjcmV0XG4gICAgfTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5ydGNDb25maWd1cmF0aW9uID0gdGhpcy5jb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oZGF0YS5ydGNDb25maWd1cmF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSAmJiBkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHB1Ymxpc2hSZXNwb25zZS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUlRDQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgcnRjQ29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbiA9IHtpY2VTZXJ2ZXJzOiBbXX07XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5ID0gY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9IGNvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemU7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykge1xuICAgICAgY29uc3QgaWNlU2VydmVyczogUlRDSWNlU2VydmVyW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgICB1cmxzOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0udXJscyxcbiAgICAgICAgICB1c2VybmFtZTogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVzZXJuYW1lLFxuICAgICAgICAgIGNyZWRlbnRpYWw6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS5jcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBydGNDb25maWd1cmF0aW9uLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kgPSBjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3kgPSBjb25maWd1cmF0aW9uLnJ0Y3BNdXhQb2xpY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ0Y0NvbmZpZ3VyYXRpb247XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlOiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24gPSBkYXRhLnNlc3Npb25EZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2U7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlOiBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlSW5pdCA9IHtcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXMsXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEub3B0aW9ucykge1xuICAgICAgICBhZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2Uub3B0aW9ucyA9IGRhdGEub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSURlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtOiBJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdCA9IHtzdGF0dXM6IGRhdGEuc3RhdHVzfTtcblxuICAgIHJldHVybiBkZXN0cm95U3RyZWFtO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2hhbm5lbFN0YXRlfSBmcm9tICcuLi9jaGFubmVscyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rZWRTdHJlYW0gaW1wbGVtZW50cyBJU3RyZWFtIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NodW5rZWRTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yRGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBfc3RyZWFtU3RhdGlzdGljczogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIHByaXZhdGUgX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQodGhpcyk7XG4gIH1cblxuICBzdGFydCh1cmk6IFVSTCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZCB8IElEaXNwb3NhYmxlPiB7XG4gICAgcmV0dXJuIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSlcbiAgICAgIC50aGVuKGVuZFBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIG51bGwsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IHRoaXMuX2NoYW5uZWxDb250ZXh0Lm1hcFN1YnNjcmliZVN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyU2RwID0gY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbi5zZHA7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgb3JpZ2luU3RhcnRUaW1lOiBEYXRlLm5vdygpIC0gbGFnICsgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDIsXG4gICAgICAgICAgbGFnXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuc3RhcnQodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgb2ZmZXJTZHAsIG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4ocGxheWVyID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4gcGxheWVyO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDaHVua2VkU3RyZWFtaW5nIGZhaWxlZCcsIGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtb25pdG9yKHBsYXllcjogSURpc3Bvc2FibGUpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1N0cmVhbVN0YXRpc3RpY3MgPSBDaHVua2VkU3RyZWFtaW5nLmdldFN0YXRzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICB0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQrKztcblxuICAgICAgICBpZiAodGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA+IDYpIHtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgcGxheWVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZWQgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MgPSBuZXdTdHJlYW1TdGF0aXN0aWNzO1xuICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG4gICAgfSwgMTAwMCk7XG5cbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICB9KSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHBsYXllciBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIGlmICghU0RLLndlYlBsYXllckxvYWRlciAmJiAhU0RLLnNoYWthUGxheWVyTG9hZGVyICYmICFTREsuaGxzSnNMb2FkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQtZmVhdHVyZSwgYWRkIHN0cmVhbSBwbGF5ZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBpZiAoU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsuaGxzSnNMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9obHNQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy53ZWJQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy53ZWJQbGF5ZXJMb2FkZXIocGxheWVyID0+IHtcbiAgICAgICAgICB0aGlzLl9waGVuaXhXZWJQbGF5ZXIgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKFNESy5zaGFrYVBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLnNoYWthUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fc2hha2EgPSBwbGF5ZXI7XG5cbiAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZykge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3BsYXllci5nZXRTdGF0cygpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGxheShQbGF5ZXI6IHR5cGVvZiBXZWJQbGF5ZXIgfCB0eXBlb2YgU2hha2FQbGF5ZXIgfCB0eXBlb2YgSGxzUGxheWVyLCB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKTogSURpc3Bvc2FibGUge1xuICAgIGNvbnN0IGRhc2hNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW1wZFxcPz9bXlxcc10qKS9tKTtcbiAgICBjb25zdCBobHNNYW5pZmVzdFVybE1hdGNoID0gb2ZmZXJTZHAubWF0Y2goL2E9eC1wbGF5bGlzdDooW15cXG5dKlsuXW0zdThcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgbWFuaWZlc3RVcmwgPSBkYXNoTWFuaWZlc3RVcmxNYXRjaCAmJiBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA/IGRhc2hNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG4gICAgY29uc3QgcGxheWxpc3RVcmwgPSBobHNNYW5pZmVzdFVybE1hdGNoICYmIGhsc01hbmlmZXN0VXJsTWF0Y2hbMV0gPyBobHNNYW5pZmVzdFVybE1hdGNoWzFdIDogJyc7XG5cbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzIHx8ICh0aGlzLl9obHNQbGF5ZXIgJiYgdGhpcy5faGxzUGxheWVyLmlzU3VwcG9ydGVkKCkpKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgUGxheWVyKHZpZGVvRWxlbWVudCwgJ2hscycsIHN0cmVhbUlkLCBwbGF5bGlzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICByZXR1cm4gdGhpcy5fcGxheWVyO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLl9wbGF5ZXIuc3RhcnQoKTtcblxuICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBsb2FkZWQodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nKTogSURpc3Bvc2FibGUge1xuICAgIGlmICghdGhpcy5fc2hha2EgJiYgIXRoaXMuX3BoZW5peFdlYlBsYXllciAmJiAhdGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hsc1BsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShIbHNQbGF5ZXIsIHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwLCB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIHByZWZlck5hdGl2ZTogRmVhdHVyZUVuYWJsZW1lbnQuc2hvdWxkVXNlTmF0aXZlSGxzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGhlbml4V2ViUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFdlYlBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaGFrYSkge1xuICAgICAgcmV0dXJuIHRoaXMucGxheShTaGFrYVBsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtJSGxzUGxheWVyVHlwZX0gZnJvbSAnLi9JSGxzUGxheWVyJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGxzUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElIbHNQbGF5ZXJUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyKSB7XG4gICAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICB0aGlzLl9wbGF5ZXIgPSBuZXcgQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIoe1xuICAgICAgICAgIGVuYWJsZVdvcmtlcjogdHJ1ZSxcbiAgICAgICAgICBtYXhCdWZmZXJMZW5ndGg6IDEsXG4gICAgICAgICAgbGl2ZUJhY2tCdWZmZXJMZW5ndGg6IDAsXG4gICAgICAgICAgbGl2ZVN5bmNEdXJhdGlvbjogNyxcbiAgICAgICAgICBsaXZlRHVyYXRpb25JbmZpbml0eTogdHJ1ZSxcbiAgICAgICAgICBsaXZlTWF4TGF0ZW5jeUR1cmF0aW9uOiBJbmZpbml0eSxcbiAgICAgICAgICBoaWdoQnVmZmVyV2F0Y2hkb2dQZXJpb2Q6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5sb2FkU291cmNlKHRoaXMuX21hbmlmZXN0VVJJKTtcbiAgICAgICAgdGhpcy5fcGxheWVyLmF0dGFjaE1lZGlhKHRoaXMuX3ZpZGVvRWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5jYW5QbGF5VHlwZSgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwnKSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQuc3JjID0gdGhpcy5fbWFuaWZlc3RVUkk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyICYmIENodW5rZWRTdHJlYW1pbmcuaGxzUGxheWVyLmlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICB3aWR0aDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9wbGF5ZXIubWVkaWEub2Zmc2V0SGVpZ2h0LFxuICAgICAgY3VycmVudFRpbWU6IHRoaXMuX3BsYXllci5tZWRpYS5jdXJyZW50VGltZSxcbiAgICAgIGxhZzogMC4wLFxuICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlLFxuICAgICAgZGF0YUJ1ZmZlcmVkOiAwLjBcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZCAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoKSB7XG4gICAgICBzdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA9IHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5lbmQoMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnSURMRScpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRVJST1InIHx8IHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlID09PSAnRU5ERUQnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ0xPQURJTkcnKSB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZS5pbmNsdWRlcygnV0FJVElORycpKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLl92aWRlb0VsZW1lbnRbJ2N1cnJlbnRUaW1lJ10gfHwgMDtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgKGN1cnJlbnRUaW1lICsgKHRoaXMuX29wdGlvbnMubGFnIC8gMTAwMCkpIC0gdHJ1ZUN1cnJlbnRUaW1lKTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyICYmIHRoaXMuX3BsYXllci5kZXN0cm95KSB7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZW51bSBOZXR3b3JrU3RhdGVzIHtcbiAgTmV0d29ya0VtcHR5LFxuICBOZXR3b3JrSWRsZSxcbiAgTmV0d29ya0xvYWRpbmcsXG4gIE5ldHdvcmtOb1NvdXJjZVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuLi8uLi9ydGMvSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBmcm9tICcuLi8uLi9kb20vR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXInO1xuaW1wb3J0IHtJU3RyZWFtfSBmcm9tICcuL0lTdHJlYW0nO1xuaW1wb3J0IHtTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c30gZnJvbSAnLi4vZGlzY292ZXJ5L0VuZFBvaW50JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgRGlzY292ZXJ5IGZyb20gJy4uL2Rpc2NvdmVyeS9EaXNjb3ZlcnknO1xuaW1wb3J0IEZlYXR1cmVFbmFibGVtZW50IGZyb20gJy4uLy4uL2Vudmlyb25tZW50L0ZlYXR1cmVFbmFibGVtZW50JztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi4vY2hhbm5lbHMvQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBSdGNDb25uZWN0aW9uTW9uaXRvciBmcm9tICcuLi8uLi9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3InO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi8uLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQgZnJvbSAnLi4vY29udGV4dC9DaGFubmVsQ29udGV4dCc7XG5pbXBvcnQgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIgZnJvbSAnLi4vLi4vcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyJztcbmltcG9ydCBQZWVyQ29ubmVjdGlvbkNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9QZWVyQ29ubmVjdGlvbkNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0JztcbmltcG9ydCBJbnNlcnRhYmxlU3RyZWFtcyBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9JbnNlcnRhYmxlU3RyZWFtcyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBjaGFubmVsQ29udGV4dDtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBwZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IHN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gICAgdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSA9IGhhbmRsZVN0cmVhbUZhaWx1cmU7XG4gIH1cblxuICBzdGFydCh1cmksIHRva2VuLCBsaXN0ZW5PblN0cmVhbVNldHVwLCBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IHR5cGVvZiB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmsgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICBEaXNjb3ZlcnkuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnRXaXRoQ2FjaGluZyh1cmkpLFxuICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLmNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKVxuICAgICAgICAudGhlbigoe2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvY2FsT2ZmZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50aGVuKChbZW5kUG9pbnQsIHtsb2NhbE9mZmVyLCBwZWVyQ29ubmVjdGlvbn1dKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlID0gZW5kUG9pbnQ7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDb25uZWN0aW5nIHRvIFslc10nLCBlbmRQb2ludC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0xvY2FsIG9mZmVyOlxcbicgKyBsb2NhbE9mZmVyLnNkcCk7XG5cbiAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmNsaWVudE9mZmVyRGlzYWJsZWQgfHwgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbiB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNHZXRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBpZiAoU0RLLmZvcmNlR2FyYmFnZUNvbGxlY3Rpb25PblJlc3RhcnQgJiYgIShGZWF0dXJlRW5hYmxlbWVudC5pc01vYmlsZSAmJiBTREsuc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKSkge1xuICAgICAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICBsb2NhbE9mZmVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludC5zdWJzY3JpYmUodG9rZW4sIGxvY2FsT2ZmZXIsIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHtzdGF0dXMsIHN0cmVhbSwgcnRjQ29uZmlndXJhdGlvbiwgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSwgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlLCBsYWd9KSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IHN0cmVhbTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubGFnLnZhbHVlID0gbGFnO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpO1xuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAnWyVzXSBTdWJzY3JpYmUgY29tcGxldGVkIFslc10gWyVqXSBbJWpdIFslal0gWyVqXScsXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsXG4gICAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlSdGNDb25maWd1cmF0aW9uKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSwgcnRjQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAudGhlbihwZWVyQ29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQgc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQ7XG4gICAgICAgICAgICBsZXQgY2FuY2VsRGlzY292ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZGlzY292ZXJ5Q29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzOiBSVENJY2VDYW5kaWRhdGVbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBwZWVyQ29ubmVjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGUgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjYW5jZWxEaXNjb3ZlcnkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIVNESy5zZW5kTG9jYWxDYW5kaWRhdGVzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGUuY2FuZGlkYXRlICYmIGUuY2FuZGlkYXRlLmNhbmRpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaChlLmNhbmRpZGF0ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJ5Q29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghc3VibWl0Q2FuZGlkYXRlc1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRDYW5kaWRhdGVzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAhPT0gc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5hZGRJY2VDYW5kaWRhdGVzKHN0cmVhbSwgY2FuZGlkYXRlcywgZGlzY292ZXJ5Q29tcGxldGVkKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoe3N0YXR1cywgb3B0aW9uc30pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIud2FybignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVzKCdjYW5jZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBBZGRlZCBJQ0UgY2FuZGlkYXRlcyB3aXRoIHJlYXNvbiBbJXNdIGFuZCBvcHRpb25zIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgc3RhdHVzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignWyVzXSBGYWlsZWQgdG8gYWRkIElDRSBjYW5kaWRhdGVzJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBpY2VDYW5kaWRhdGVBY2N1bXVsYXRpb25JbnRlcnZhbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlICE9PSBwZWVyQ29ubmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3RvcCBub3JtYWxseSB0aGUgcGVlciBjb25uZWN0aW9uIGlzIHVucmVnaXN0ZXJlZCBmaXJzdC5cbiAgICAgICAgICAgICAgICAvLyBUaHVzIGFueXRpbWUgd2Ugc2VlIGEgY2xvc2VkIHBlZXIgY29ubmVjdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkLCBpdCBpcyBhbiBlcnJvci5cbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciBwZWVyIGNvbm5lY3Rpb24gc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraW5nJzpcbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnbmV3JzpcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Rpc2Nvbm5lY3RlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHBlZXJDb25uZWN0aW9uLmdldFJlY2VpdmVycygpLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRWaWRlb1N0cmVhbVNpbmssIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZEF1ZGlvU3RyZWFtU2luayk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIGRpc3Bvc2FibGVzLmZvckVhY2goZGlzcG9zYWJsZSA9PiB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQoZGlzcG9zYWJsZSkpO1xuICAgICAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gdHJhbnNmb3JtZWRTdHJlYW07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBtZWRpYVN0cmVhbTtcblxuICAgICAgICAgICAgICBjb25zdCBydGNDb25uZWN0aW9uTW9uaXRvciA9IG5ldyBSdGNDb25uZWN0aW9uTW9uaXRvcihwZWVyQ29ubmVjdGlvbiwgbWVkaWFTdHJlYW0sIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLnJvdW5kVHJpcFRpbWUgLyA0KTtcblxuICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQocnRjQ29ubmVjdGlvbk1vbml0b3IpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEF1ZGlvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuYXVkaW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MuYXVkaW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCAhPT0gc3RhdGlzdGljcy52aWRlby50aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UcmFja0ZhaWxlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQgPT09IHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9UcmFja0ZhaWxlZCAmJiBuYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBWaWRlbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLnZpZGVvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MudmlkZW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCh2aWRlb1RyYWNrRmFpbGVkIHx8IGF1ZGlvVHJhY2tGYWlsZWQpICYmIG5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5Q2FsbGJhY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBGYWlsZWQgaGFuZGxpbmcgc3RyZWFtIGZhaWx1cmUgYWZ0ZXIgdHJhY2sgc3RvcHBlZCB3aXRoIHN0YXRlIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbm5lY3RQZWVyQ29ubmVjdGlvbihwZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghU0RLLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudChtZWRpYVN0cmVhbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVJ0Y0NvbmZpZ3VyYXRpb24oXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uIHwgbnVsbCxcbiAgICBydGNDb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICBpZiAoIW9wdGlvbmFsUGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24gPSBSdGNDb25maWd1cmF0aW9uTWFuYWdlci50cnVuY2F0ZUljZVNlcnZlcnMocnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICAgIHJldHVybiBTREsucGVlckNvbm5lY3Rpb25GYWN0b3J5LnZhbHVlLmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1J0Y0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi5vcHRpb25hbFBlZXJDb25uZWN0aW9uLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIC4uLnJ0Y0NvbmZpZ3VyYXRpb25cbiAgICB9O1xuXG4gICAgb3B0aW9uYWxQZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKG5ld1J0Y0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBwcml2YXRlIHJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24sIHJldHJ5Q2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlJlY29ubmVjdGluZztcblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA8IFNESy5tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIHx8ICFTREsuYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cysrO1xuXG4gICAgICBjb25zdCBpc0NsaWVudE9mZmVyRmxvdyA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uPy50eXBlID09PSAnb2ZmZXInO1xuXG4gICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fFxuICAgICAgICAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIWlzQ2xpZW50T2ZmZXJGbG93XG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnUmVjb25uZWN0aW5nIHBlZXIgY29ubmVjdGlvbiBieSByZXN0YXJ0aW5nIElDRScpO1xuXG4gICAgICBjb25zdCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IHBlZXJDb25uZWN0aW9uLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uO1xuICAgICAgY29uc3QgaWdub3JlZCA9IHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHtpY2VSZXN0YXJ0OiB0cnVlfSkudGhlbihvZmZlciA9PiB7XG4gICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihjdXJyZW50TG9jYWxEZXNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlY29ubmVjdCBwZWVyIGNvbm5lY3Rpb24nLCBlKTtcbiAgICAgICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbiBhZnRlciBbJXNdIGF0dGVtcHRzLCBwZXJmb3JtaW5nIGZ1bGwgcmVjb3ZlcnknLCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyk7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgIHJldHJ5Q2FsbGJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyk6IENoYW5uZWxTdGF0ZSB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgJ29rJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5TdGFydGluZztcbiAgICAgIGNhc2UgJ3VuYXV0aG9yaXplZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgY2FzZSAnbm90LWZvdW5kJzpcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5FcnJvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHN0YXR1cyk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG50eXBlIFNoYWthT3B0aW9ucyA9IHtcbiAgYWJyOiB7XG4gICAgZGVmYXVsdEJhbmR3aWR0aEVzdGltYXRlOiBudW1iZXI7XG4gIH07XG4gIG1hbmlmZXN0OiB7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgc3RyZWFtaW5nOiB7XG4gICAgcmVidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyaW5nR29hbDogbnVtYmVyO1xuICAgIGJ1ZmZlckJlaGluZDogbnVtYmVyO1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgICAgbWF4QXR0ZW1wdHM6IG51bWJlcjtcbiAgICAgIGJhY2tvZmZGYWN0b3I6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBJU2hha2Ege1xuICBjb25maWd1cmU6IChvOiBTaGFrYU9wdGlvbnMpID0+IHZvaWQ7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0U3RhdHM6ICgpID0+IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xuICBkZXN0cm95OiAoKSA9PiB2b2lkO1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWthUGxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1NoYWthUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5zaGFrYSkge1xuICAgICAgY29uc3QgcGxheWVyT3B0aW9uczogU2hha2FPcHRpb25zID0ge1xuICAgICAgICBhYnI6IHtkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGU6IDIwMDAwMDB9LFxuICAgICAgICBtYW5pZmVzdDoge3JldHJ5UGFyYW1ldGVyczoge3RpbWVvdXQ6IDEwMDAwfX0sXG4gICAgICAgIHN0cmVhbWluZzoge1xuICAgICAgICAgIHJlYnVmZmVyaW5nR29hbDogMixcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiAxMCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTG9hZGluZztcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MucGxheVRpbWUgPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnZpZGVvKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtaW5nJyk7XG5cbiAgc3RhdGljIGNyZWF0ZSh0b2tlbjogc3RyaW5nLCBjaGFubmVsQ29udGV4dCwgcGVlckNvbm5lY3Rpb25Db250ZXh0LCBzdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogSVN0cmVhbSB7XG4gICAgY29uc3QgdG9rZW5DYXBhYmlsaXRpZXMgPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKHRva2VuKS5jYXBhYmlsaXRpZXM7XG5cbiAgICBpZiAodG9rZW5DYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ3N0cmVhbWluZycpIHx8IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdvbi1kZW1hbmQnKSkge1xuICAgICAgcmV0dXJuIG5ldyBDaHVua2VkU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBoYW5kbGVTdHJlYW1GYWlsdXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlYWxUaW1lU3RyZWFtKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlYW1GYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxuY29uc3QgYmFuZHdpZHRoVG9TdGFydEF0ID0gMzAwMDAwMDsgLy8gQ29ycmVzcG9uZHMgdG8gNzIwcCBpbiBtb3N0IHNldHVwc1xuY29uc3QgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgPSAxNTAwMDtcblxudHlwZSBFdmVudExpc3RlbmVyRm9yV2ViUGxheWVyID0gKGV2dDogV2ViUGxheWVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIFdlYlBsYXllckV2ZW50ID0ge1xuICBjb2RlOiBudW1iZXI7XG4gIHNldmVyaXR5OiBudW1iZXI7XG4gIGVycm9yOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElXZWJQbGF5ZXIge1xuICBzdGFydDogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyKG5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIpOiB2b2lkO1xuICBkaXNwb3NlKCk6IHZvaWQ7XG4gIGVycm9yczoge1xuICAgIHNldmVyaXR5OiB7XG4gICAgICBSRUNPVkVSQUJMRTogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignV2ViUGxheWVyJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfa2luZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYW5pZmVzdFVSSTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBfcGxheWVyOiBJV2ViUGxheWVyO1xuICBwcml2YXRlIF9sYXN0UmVsb2FkVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwga2luZDogc3RyaW5nLCBzdHJlYW1JZDogc3RyaW5nLCBtYW5pZmVzdFVSSTogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucykge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudCA9IHZpZGVvRWxlbWVudDtcbiAgICB0aGlzLl9raW5kID0ga2luZDtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX21hbmlmZXN0VVJJID0gZW5jb2RlVVJJKG1hbmlmZXN0VVJJKS5yZXBsYWNlKC9bI10vZywgJyUyMycpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zID0ge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBiYW5kd2lkdGhUb1N0YXJ0QXRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5XZWJQbGF5ZXIodGhpcy5fbG9nZ2VyLCB0aGlzLl92aWRlb0VsZW1lbnQsIHBsYXllck9wdGlvbnMpO1xuICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KHRoaXMuX21hbmlmZXN0VVJJKTtcblxuICAgICAgdGhpcy5fcGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JPYmplY3QgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5SZWxvYWQoKSAmJiBlcnJvck9iamVjdCAmJiAoZXJyb3JPYmplY3QuY29kZSA9PT0gMyB8fCBlcnJvck9iamVjdC5zZXZlcml0eSA9PT0gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuZXJyb3JzLnNldmVyaXR5LlJFQ09WRVJBQkxFKSkge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdSZWxvYWRpbmcgdW5oZWFsdGh5IHN0cmVhbSBhZnRlciBlcnJvciBldmVudCBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgICAgIHRoaXMucmVsb2FkSWZBYmxlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZWxvYWQgd2l0aCBlcnJvciBbJWpdJywgZXJyb3JPYmplY3QpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIgJiYgQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIuaXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXRTdGF0cygpOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcyB7XG4gICAgaWYgKCF0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIGN1cnJlbnRUaW1lOiAwLjAsXG4gICAgICAgIGxhZzogMC4wLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlLFxuICAgICAgICBkYXRhQnVmZmVyZWQ6IDAuMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0gdGhpcy5fcGxheWVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lIHx8IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXTtcbiAgICBjb25zdCB0cnVlQ3VycmVudFRpbWUgPSAoRGF0ZS5ub3coKSAtIHRoaXMuX29wdGlvbnMub3JpZ2luU3RhcnRUaW1lKSAvIDEwMDA7XG5cbiAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgIHN0YXRpc3RpY3MuZGF0YUJ1ZmZlcmVkID0gdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmVuZCgwKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5pc05hdGl2ZSAmJiBzdGF0aXN0aWNzLmRlbGl2ZXJ5VHlwZSA9PT0gJ0hscycpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZSAtIHN0YXRpc3RpY3MubGFnO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5jdXJyZW50VGltZSkge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cblxuICAgIGlmICghc3RhdGlzdGljcy5pc05hdGl2ZSkge1xuICAgICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPiAwKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0xvYWRpbmc7XG4gICAgfSBlbHNlIGlmIChzdGF0aXN0aWNzLnBsYXlUaW1lID4gMCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtJZGxlO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy52aWRlbykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtFbXB0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllcikge1xuICAgICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wbGF5ZXIgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5SZWxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQgPSAhdGhpcy5fbGFzdFJlbG9hZFRpbWUgfHwgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RSZWxvYWRUaW1lID4gbWluVGltZUJlZm9yZU5leHRSZWxvYWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fdmlkZW9FbGVtZW50ICYmIHRoaXMuX3BsYXllciAmJiB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQubGVuZ3RoICE9PSAwICYmIGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRJZkFibGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlbG9hZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1slc10gUmVsb2FkaW5nIHVuaGVhbHRoeSBzdHJlYW0gdGhhdCB3YXMgYWN0aXZlIGZvciBhdCBsZWFzdCBbJXNdIHNlY29uZHMnLCB0aGlzLl9zdHJlYW1JZCwgbWluVGltZUJlZm9yZU5leHRSZWxvYWQgLyAxMDAwKTtcblxuICAgIHRoaXMuX2xhc3RSZWxvYWRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRW5jb2RlZFN0cmVhbVNpbms8VCA9IFJUQ0VuY29kZWRBdWRpb0ZyYW1lIHwgUlRDRW5jb2RlZFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBUKTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNvZGVkU3RyZWFtU2luayB7XG4gIHN0YXRpYyB2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IEVuY29kZWQgU3RyZWFtIFNpbmsgZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMi4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWRTdHJlYW1TaW5rIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQge0lFbmNvZGVkU3RyZWFtU2lua30gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vRW5jb2RlZFN0cmVhbVNpbmsnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnNlcnRhYmxlU3RyZWFtcyB7XG4gIHN0YXRpYyBhcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCByZWNlaXZlcnM6IFJUQ1J0cFJlY2VpdmVyW10sIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4sIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4pIDogdm9pZCB7XG4gICAgY29uc3QgaDI2NElGcmFtZTJ4MiA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweGY0LCAweDAwLCAweDBhLCAweDkxLCAweDliLCAweDJiLCAweGYxLCAweGYxLCAweGY4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDA3LCAweDg5LCAweDEyLCAweGNiLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGViLCAweGUzLCAweGM0LCAweDQ4LCAweDQ0LCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDgyLCAweDAwLCAweDNmLCAweDcwLCAweDIzLCAweDg2LCAweGU2LCAweGQxLCAweDgwLCAweDA5LCAweGFmLCAweDBhLCAweDQxLCAweDY2LCAweDZiLCAweDU0LCAweDQ2LCAweGZiLCAweDcxLCAweGQ5LCAweDdmLCAweGZmLCAweGZmLCAweGY5XSk7XG4gICAgY29uc3QgaDI2NFBGcmFtZTJ4MiA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA5LCAweGYwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDQxLCAweDlhLCAweDY4LCAweDQ5LCAweGE4LCAweDQxLCAweDY4LCAweDk5LCAweDRjLCAweDBmLCAweGZmLCAweDkyLCAweDgxXSk7XG4gICAgY29uc3QgdnA4SUZyYW1lMXgxID0gbmV3IFVpbnQ4QXJyYXkoWzB4YjAsIDB4MDIsIDB4MDAsIDB4OWQsIDB4MDEsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MzksIDB4NmIsIDB4MDAsIDB4MjcsIDB4MWMsIDB4MjQsIDB4MGMsIDB4MmMsIDB4MmMsIDB4NDQsIDB4Y2MsIDB4MjQsIDB4NDEsIDB4YTgsIDB4MDAsIDB4MTMsIDB4YTcsIDB4YTMsIDB4N2EsIDB4NTAsIDB4MDAsIDB4ZmUsIDB4ZWIsIDB4ZGUsIDB4MmYsIDB4OGEsIDB4MWUsIDB4NmIsIDB4N2IsIDB4MDcsIDB4NzIsIDB4NjMsIDB4MDksIDB4YTQsIDB4OGUsIDB4YzBdKTtcbiAgICBjb25zdCB2cDhQRnJhbWUxeDEgPSBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pO1xuICAgIGNvbnN0IHZwOUlGcmFtZTF4MSA9IG5ldyBVaW50OEFycmF5KFsweDgyLCAweDQ5LCAweDgzLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDc2LCAweDM4LCAweDI0LCAweDFjLCAweDE5LCAweGEwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDExLCAweGJmLCAweGRkLCAweDc3LCAweGZmLCAweDQwLCAweDdmLCAweGIxLCAweDAwXSk7XG4gICAgY29uc3QgdnA5UEZyYW1lMXgxID0gbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKTtcbiAgICBjb25zdCBvcHVzU2lsZW50ID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjgsIDB4MDcsIDB4ZDksIDB4YWIsIDB4YmMsIDB4NzksIDB4ODcsIDB4YWIsIDB4OGUsIDB4NGEsIDB4MTQsIDB4ZjMsIDB4YTcsIDB4MWMsIDB4ZjIsIDB4OWEsIDB4N2EsIDB4NDUsIDB4YTcsIDB4MmQsIDB4NDQsIDB4MjUsIDB4NzQsIDB4NGMsIDB4YWQsIDB4MTYsIDB4YjMsIDB4MGUsIDB4NTEsIDB4NTcsIDB4ZWEsIDB4ZTcsIDB4YWQsIDB4MmEsIDB4MzgsIDB4Y2UsIDB4MzNdKTtcbiAgICBjb25zdCBpbnZhbGlkRnJhbWUgPSBuZXcgVWludDhBcnJheShbMHgwMF0pO1xuXG4gICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4ge1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSByZWNlaXZlcnMuZmlsdGVyKHJlY2VpdmUgPT4gcmVjZWl2ZS50cmFjayA9PT0gdHJhY2spWzBdO1xuXG4gICAgICBzd2l0Y2ggKHRyYWNrLmtpbmQpIHtcbiAgICAgICAgY2FzZSAndmlkZW8nOiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRWaWRlb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGxldCB2aWRlb0NvZGVjOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRWaWRlb0ZyYW1lLCBSVENFbmNvZGVkVmlkZW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVuY29kZWRWaWRlb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gaW52YWxpZEZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXZpZGVvQ29kZWMpIHtcbiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmdldFN0YXRzKCkudGhlbihzdGF0cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjb2RlYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvQ29kZWMgPSByZXBvcnQubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh2aWRlb0NvZGVjID09PSAndmlkZW8vSDI2NCcpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSAoY2h1bmsudHlwZSA9PT0gJ2tleScpID8gaDI2NElGcmFtZTJ4Mi5idWZmZXIgOiBoMjY0UEZyYW1lMngyLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZpZGVvQ29kZWMgPT09ICd2aWRlby9WUDgnKSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gKGNodW5rLnR5cGUgPT09ICdrZXknKSA/IHZwOElGcmFtZTF4MS5idWZmZXIgOiB2cDhQRnJhbWUxeDEuYnVmZmVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW9Db2RlYyA9PT0gJ3ZpZGVvL1ZQOScpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSAoY2h1bmsudHlwZSA9PT0gJ2tleScpID8gdnA5SUZyYW1lMXgxLmJ1ZmZlciA6IHZwOVBGcmFtZTF4MS5idWZmZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGxldCBhdWRpb0NvZGVjOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFJUQ0VuY29kZWRBdWRpb0ZyYW1lLCBSVENFbmNvZGVkQXVkaW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gaW52YWxpZEZyYW1lLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWF1ZGlvQ29kZWMpIHtcbiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyLmdldFN0YXRzKCkudGhlbihzdGF0cyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVwb3J0LnR5cGUgPT09ICdjb2RlYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvQ29kZWMgPSByZXBvcnQubWltZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChhdWRpb0NvZGVjID09PSAnYXVkaW8vb3B1cycpIHtcbiAgICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBvcHVzU2lsZW50LmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoY2h1bmspO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcmVjZWl2ZXJTdHJlYW1zID0gcmVjZWl2ZXIuY3JlYXRlRW5jb2RlZFN0cmVhbXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHJlY2VpdmVyU3RyZWFtcy5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSByZWNlaXZlclN0cmVhbXMud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KSA6IHt0cmFuc2Zvcm1lZFN0cmVhbTogTWVkaWFTdHJlYW07IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW119IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgIGNvbnN0IGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlW10gPSBbXTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIHN3aXRjaCAodHJhY2sua2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAodmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPFZpZGVvRnJhbWUsIFZpZGVvRnJhbWU+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZGVvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbVZpZGVvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IHZpZGVvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiB2aWRlb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICBkaXNwb3NhYmxlcy5wdXNoKFxuICAgICAgICAgICAgICBuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdhdWRpbyc6XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBpZiAoYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaykge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBUcmFuc2Zvcm1lclRyYW5zZm9ybUNhbGxiYWNrPEF1ZGlvRGF0YSwgQXVkaW9EYXRhPiA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKHRyYWNrLCBjaHVuaywgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBhdWRpb1RyYWNrID0gdHJhY2sgYXMgTWVkaWFTdHJlYW1BdWRpb1RyYWNrO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm06IGluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1DYWxsYmFja30pO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3Ioe3RyYWNrOiBhdWRpb1RyYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvcih7a2luZDogYXVkaW9UcmFjay5raW5kfSk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBwcm9jZXNzb3IucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gZ2VuZXJhdG9yLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5hZGRUcmFjayhnZW5lcmF0b3IpO1xuXG4gICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgY29uc3QgYXVkaW9QdW1wZXIgPSBuZXcgQXVkaW8oKTtcblxuICAgICAgICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2sodHJhY2spO1xuICAgICAgICAgICAgYXVkaW9QdW1wZXIuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFN0cmVhbS5yZW1vdmVUcmFjayhnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLFxuICAgICAgZGlzcG9zYWJsZXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnNlcnRhYmxlU3RyZWFtcyBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFQgPSBBdWRpb0RhdGEgfCBWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCwgY29udHJvbGxlcjogVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI8VD4pOiB2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbVRyYWNrVHJhbnNmb3JtIHtcbiAgc3RhdGljIHZhbGlkYXRlTWVkaWFTdHJlYW1UcmFja1RyYW5zZm9ybShtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSVN0cmVhbVRyYWNrVHJhbnNmb3JtKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDMuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gIHByaXZhdGUgX3VybCA9ICdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeS9sb2dzJztcbiAgcHJpdmF0ZSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfdGhyZXNob2xkID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZWxlbWV0cnlVcmwgPSBuZXcgVVJMKHVybCk7XG5cbiAgICB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgPSB0ZWxlbWV0cnlVcmwucGF0aG5hbWUgKyAnL2xvZ3MnO1xuXG4gICAgdGhpcy5fdXJsID0gdGVsZW1ldHJ5VXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc2V0IHRlbmFuY3kodGVuYW5jeTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGVuYW5jeSA9IHRlbmFuY3k7XG4gIH1cblxuICBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25JZDtcbiAgfVxuXG4gIHNldCBzZXNzaW9uSWQoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gIH1cblxuICBnZXQgdGhyZXNob2xkKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCByZXF1ZXN0U2l6ZUxpbWl0ID0gODE5MjtcblxuaW50ZXJmYWNlIElMb2dJdGVtIHtcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHRlbmFuY3k6IHN0cmluZztcbiAgbGV2ZWw6IHN0cmluZztcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBmdWxsUXVhbGlmaWVkTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBsb2NhdGlvbi5ob3N0bmFtZTtcblxuICBjb25zdHJ1Y3Rvcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdXNoKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGVuYW5jeSxcbiAgICAgIGxldmVsOiBMb2dnaW5nTGV2ZWxbbG9nTGV2ZWxdLFxuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlLFxuICAgICAgc2Vzc2lvbklkOiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHZlcnNpb246IFZlcnNpb25NYW5hZ2VyLnNka1ZlcnNpb24sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW5cbiAgICB9O1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLkVycm9yKSB7XG4gICAgICB0aGlzLl9sb2dzLnB1c2gobG9nUmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9ncy51bnNoaWZ0KGxvZ1JlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3MobG9nTWVzc2FnZXM6IEFycmF5PElMb2dJdGVtPik6IFByb21pc2U8UmVzcG9uc2UgfCB2b2lkPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbG9nTWVzc2FnZXN9KSk7XG5cbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogZm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZExvZ3NJZkFibGUoKTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9ncy5sZW5ndGggPD0gMCB8fCB0aGlzLl9pc1NlbmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMDtcbiAgICBsZXQgc2l6ZU9mTG9nc1RvU2VuZCA9IDA7XG5cbiAgICB0aGlzLl9pc1NlbmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZ2V0TG9nU2l6ZSA9IChsb2c6IElMb2dJdGVtKTogbnVtYmVyID0+IE9iamVjdC52YWx1ZXMobG9nKVxuICAgICAgLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyAoaXRlbSA/IGl0ZW0ubGVuZ3RoIDogMCksIDApO1xuXG4gICAgd2hpbGUgKHRoaXMuX2xvZ3MubGVuZ3RoID4gbnVtYmVyT2ZMb2dzVG9TZW5kICYmIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSArIHNpemVPZkxvZ3NUb1NlbmQgPCByZXF1ZXN0U2l6ZUxpbWl0KSB7XG4gICAgICBzaXplT2ZMb2dzVG9TZW5kICs9IGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCsrO1xuICAgIH1cblxuICAgIGlmICghbnVtYmVyT2ZMb2dzVG9TZW5kKSB7XG4gICAgICB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZSA9IHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXS5tZXNzYWdlLnN1YnN0cmluZygwLFxuICAgICAgICBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyAocmVxdWVzdFNpemVMaW1pdCAtIGdldExvZ1NpemUodGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdKSkpO1xuICAgICAgbnVtYmVyT2ZMb2dzVG9TZW5kID0gMTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dNZXNzYWdlcyA9IHRoaXMuX2xvZ3Muc2xpY2UoMCwgbnVtYmVyT2ZMb2dzVG9TZW5kKTtcblxuICAgIHRoaXMuX2xvZ3MgPSB0aGlzLl9sb2dzLnNsaWNlKG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTG9ncyhsb2dNZXNzYWdlcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzU2VuZGluZyA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICAgIH0pO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIER1cmF0aW9ucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoZHVyYXRpb24gPSAwKSB7XG4gICAgdGhpcy5fZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgfVxuXG4gIHRvSXNvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2R1cmF0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm4gJ1AwUyc7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IHRoaXMuX2R1cmF0aW9uIDwgMDtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGlzTmVnYXRpdmUgPyBNYXRoLmFicyh0aGlzLl9kdXJhdGlvbikgOiB0aGlzLl9kdXJhdGlvbjtcbiAgICBsZXQgb2Zmc2V0ID0gTWF0aC5mbG9vcihkdXJhdGlvbik7XG4gICAgY29uc3QgbWlsbGlzZWNvbmRzID0gb2Zmc2V0ICUgMTAwMDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gMTAwMCk7XG5cbiAgICBjb25zdCBzZWNvbmRzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IG1pbnV0ZXMgPSBvZmZzZXQgJSA2MDtcblxuICAgIG9mZnNldCA9IE1hdGguZmxvb3Iob2Zmc2V0IC8gNjApO1xuXG4gICAgY29uc3QgaG91cnMgPSBvZmZzZXQgJSAyNDtcbiAgICBjb25zdCBwYXJ0cyA9IFsnUFQnXTtcblxuICAgIGlmIChpc05lZ2F0aXZlKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCctJyk7XG4gICAgfVxuXG4gICAgaWYgKGhvdXJzKSB7XG4gICAgICBwYXJ0cy5wdXNoKGhvdXJzICsgJ0gnKTtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcykge1xuICAgICAgcGFydHMucHVzaChtaW51dGVzICsgJ00nKTtcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyB8fCBtaWxsaXNlY29uZHMpIHtcbiAgICAgIHBhcnRzLnB1c2goU3RyaW5nKHNlY29uZHMpKTtcblxuICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICBwYXJ0cy5wdXNoKCcuJyArIHRoaXMucGFkU3RhcnQobWlsbGlzZWNvbmRzLnRvU3RyaW5nKCksIDMsICcwJykpO1xuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKCdTJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgcGFkU3RhcnQoaXRlbTogc3RyaW5nLCB0YXJnZXRMZW5ndGg6IG51bWJlciwgcGFkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCA+PiAwO1xuICAgIHBhZFN0cmluZyA9IFN0cmluZygodHlwZW9mIHBhZFN0cmluZyAhPT0gJ3VuZGVmaW5lZCcgPyBwYWRTdHJpbmcgOiAnICcpKTtcblxuICAgIGlmIChpdGVtLmxlbmd0aCA+IHRhcmdldExlbmd0aCkge1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0TGVuZ3RoIC0gaXRlbS5sZW5ndGg7XG5cbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gcGFkU3RyaW5nLmxlbmd0aCkge1xuICAgICAgcGFkU3RyaW5nICs9IHBhZFN0cmluZy5yZXBlYXQodGFyZ2V0TGVuZ3RoIC8gcGFkU3RyaW5nLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZFN0cmluZy5zbGljZSgwLCB0YXJnZXRMZW5ndGgpICsgaXRlbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDIwMDA7XG5jb25zdCBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDE7XG5jb25zdCBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IDMwMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb25lbnRpYWxCYWNrb2ZmIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCxcbiAgICBtYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXIgPSBkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZFxuICApIHtcbiAgICB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9taW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgICB0aGlzLl9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kID0gbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDtcbiAgfVxuXG4gIGdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQoZmFpbHVyZUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyA9IHRoaXMuX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgLyAxMDAwO1xuICAgIGNvbnN0IHJhbmRvbWl6YXRpb24gPSAwLjUgKyAoMC41ICogTWF0aC5yYW5kb20oKSk7IC8vIFswLjUsIDEpXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmID0gTWF0aC5wb3coYmFja29mZkludGVydmFsSW5TZWNvbmRzLCBmYWlsdXJlQ291bnQgLSAyKTsgLy8gIFsxLzQgMS8yIDEgMiA0IDggLi4uLl1cbiAgICBjb25zdCBleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiA9IE1hdGguZmxvb3IoZXhwb25lbnRpYWxCYWNrb2ZmKSAqIHJhbmRvbWl6YXRpb247XG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb25Jbk1pbGxpc2Vjb25kID0gTWF0aC5jZWlsKE1hdGgubWF4KGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uICogMTAwMCwgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCkpO1xuXG4gICAgcmV0dXJuIE1hdGgubWluKGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCwgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDIzIFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJQ29tcGFyYWJsZSBmcm9tICcuLi9sYW5nL0lDb21wYXJhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGltZW5zaW9uIGltcGxlbWVudHMgSUNvbXBhcmFibGU8RGltZW5zaW9uPiB7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKTogRGltZW5zaW9uIHtcbiAgICByZXR1cm4gbmV3IERpbWVuc2lvbigwLCAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBEaW1lbnNpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy53aWR0aCA9PT0gb3RoZXIud2lkdGggJiYgdGhpcy5oZWlnaHQgPT09IG90aGVyLmhlaWdodDtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMud2lkdGh9eCR7dGhpcy5oZWlnaHR9YDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjMgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtTdHJlYW1TZXR1cExpc3RlbmVyfSBmcm9tICcuLi9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IE5ldHdvcmtNb25pdG9yIGZyb20gJy4uL2RvbS9OZXR3b3JrTW9uaXRvcic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0lEaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcblxuaW50ZXJmYWNlIElOZXR3b3JrU3RhdGlzdGljcyB7XG4gIHJ0dD86IG51bWJlcjtcbiAgZWZmZWN0aXZlVHlwZT86IHN0cmluZztcbiAgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlc3Npb25UZWxlbWV0cnkgaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTZXNzaW9uVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgPSBTREsuYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25ldHdvcmtNb25pdG9yOiBOZXR3b3JrTW9uaXRvciA9IG5ldyBOZXR3b3JrTW9uaXRvcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgX2xhc3ROZXR3b3JrU3RhdGlzdGljczogSU5ldHdvcmtTdGF0aXN0aWNzID0ge307XG5cbiAgY29uc3RydWN0b3IocGFnZUxvYWRUaW1lOiBudW1iZXIsIG1ldHJpY3NTZXJ2aWNlOiBNZXRyaWNzU2VydmljZSkge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IpO1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuX25ldHdvcmtNb25pdG9yLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLmlzRm9yZWdyb3VuZC5zdWJzY3JpYmUoaXNGb3JlZ3JvdW5kID0+IHtcbiAgICAgIHRoaXMucmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IucnR0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnJlY29yZE5ldHdvcmtSVFRVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZWZmZWN0aXZlVHlwZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrVHlwZUNoYW5nZVVwZGF0ZSh2YWx1ZSk7XG4gICAgfSkpO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9uZXR3b3JrTW9uaXRvci5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIGxpc3Rlbk9uU3RyZWFtU2V0dXAoKTogU3RyZWFtU2V0dXBMaXN0ZW5lciB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1TZXR1cExpc3RlbmVyKHRoaXMuX3BhZ2VMb2FkVGltZSk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkRm9yZWdyb3VuZENoYW5nZShpc0ZvcmVncm91bmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RDaGFuZ2UgPSB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5nZXRUaW1lU2luY2VMYXN0Q2hhbmdlKCk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IGlzRm9yZWdyb3VuZCA/IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uRm9yZWdyb3VuZCA6IE1ldHJpY3NUeXBlLkFwcGxpY2F0aW9uQmFja2dyb3VuZCxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VMYXN0Q2hhbmdlfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnQXBwbGljYXRpb24gaGFzIGdvbmUgaW50byB0aGUgWyVzXSBhZnRlciBbJXNdIG1zJyxcbiAgICAgIGlzRm9yZWdyb3VuZCA/ICdmb3JlZ3JvdW5kJyA6ICdiYWNrZ3JvdW5kJyxcbiAgICAgIG5ldyBEdXJhdGlvbnModGltZVNpbmNlTGFzdENoYW5nZSkudG9Jc29TdHJpbmcoKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmROZXR3b3JrUlRUVXBkYXRlKG5ld1JUVDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRSdHQgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MucnR0O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dCA9IG5ld1JUVDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBuZXdSVFR9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkUnR0ID8ge3VpbnQ2NDogb2xkUnR0fSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlc291cmNlOiAnbmF2aWdhdG9yJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIFJUVCBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3UlRULFxuICAgICAgb2xkUnR0XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUobmV3TmV0d29ya1R5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkTmV0d29ya1R5cGUgPSB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5lZmZlY3RpdmVUeXBlID0gbmV3TmV0d29ya1R5cGU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld05ldHdvcmtUeXBlfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZE5ldHdvcmtUeXBlID8ge3N0cmluZzogb2xkTmV0d29ya1R5cGV9IDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIE5ldHdvcmsgZWZmZWN0aXZlIHR5cGUgaGFzIGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdOZXR3b3JrVHlwZSxcbiAgICAgIG9sZE5ldHdvcmtUeXBlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKG5ld0NhcGFjaXR5OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZENhcGFjaXR5ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuXG4gICAgdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5ID0gbmV3Q2FwYWNpdHk7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5LFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtmbG9hdDogbmV3Q2FwYWNpdHl9LFxuICAgICAgcHJldmlvdXNWYWx1ZTogb2xkQ2FwYWNpdHkgPyB7ZmxvYXQ6IG9sZENhcGFjaXR5fSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGRvd25saW5rIHRocm91Z2hwdXQgY2FwYWNpdHkgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld0NhcGFjaXR5LFxuICAgICAgb2xkQ2FwYWNpdHlcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMyBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IER1cmF0aW9ucyBmcm9tICcuLi90aW1lL0R1cmF0aW9uJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZGVvVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtVGVsZW1ldHJ5Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdHJlYW1JZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgX2xpc3RlblRvRmlyc3RUaW1lOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIF9saXN0ZW5Gb3JTdGFsbDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yQ29udGludWF0aW9uOiAoZXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX3RpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZTogbnVtYmVyO1xuICBwcml2YXRlIF9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9TdGFsbGVkOiBudW1iZXI7XG4gIHByaXZhdGUgX2xhc3RQcm9ncmVzczogbnVtYmVyO1xuICBwcml2YXRlIF92aWRlb1Jlc29sdXRpb246IHN0cmluZztcbiAgcHJpdmF0ZSBfY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXI6IERpc3Bvc2FibGU7XG4gIHByaXZhdGUgX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lcjogRGlzcG9zYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW1JZDogc3RyaW5nLCBwYWdlTG9hZFRpbWU6IG51bWJlciwgY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9zdHJlYW1JZCA9IHN0cmVhbUlkO1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgICB0aGlzLl9jaGFubmVsU3RhcnRUaW1lID0gY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlID0gbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lID0gKCk6IHZvaWQgPT4gdGhpcy5jYWxsVGltZVRvRmlyc3RGcmFtZSgpO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fbGlzdGVuVG9GaXJzdFRpbWUpO1xuICAgIH0pO1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lcik7XG4gIH1cblxuICBzZXR1cExpc3RlbmVyRm9yUmVidWZmZXJpbmcodmlkZW86IEhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5Gb3JTdGFsbCA9ICgpOiB2b2lkID0+IHRoaXMub25TdGFsbCgpO1xuXG4gICAgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uID0gKGV2ZW50KTogdm9pZCA9PiB0aGlzLm9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk7XG5cbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWV1cGRhdGUnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuXG4gICAgdGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyID0gbmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhdXNlJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3VzcGVuZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkdXJhdGlvblNpbmNlUGFnZUxvYWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsVGltZVRvRmlyc3RGcmFtZSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5wdXNoVGltZVRvRmlyc3RGcmFtZShub3cpO1xuICAgIHRoaXMucHVzaENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUobm93KTtcblxuICAgIHRoaXMuX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTogdm9pZCB7XG4gICAgdGhpcy5fdGltZVRvRmlyc3RGcmFtZSA9IG5vdyAtIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl90aW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIEZpcnN0IGZyYW1lIFslc10nLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZCxcbiAgICAgIG5ldyBEdXJhdGlvbnModGhpcy5fdGltZVRvRmlyc3RGcmFtZSkudG9Jc29TdHJpbmcoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9jaGFubmVsU3RhcnRUaW1lO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWV9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gQ2hhbm5lbCBjcmVhdGlvbiB0byBmaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN0YWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl92aWRlb1N0YWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlN0YWxsZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgc3RhbGxlZCcsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db250aW51YXRpb24oZXZlbnQsIHZpZGVvKTogdm9pZCB7XG4gICAgaWYgKCF2aWRlby5idWZmZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHZpZGVvLmJ1ZmZlcmVkLmxlbmd0aDtcbiAgICBjb25zdCBoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCA9IGV2ZW50LnR5cGUgPT09ICdwbGF5aW5nJ1xuICAgIHx8IGJ1ZmZlckxlbmd0aCA+IDAgPyAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJ1xuICAgICAgfHwgZXZlbnQudHlwZSA9PT0gJ3RpbWV1cGRhdGUnKVxuICAgICAgJiYgdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpID09PSB0aGlzLl9sYXN0UHJvZ3Jlc3MgOiB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl92aWRlb1N0YWxsZWQgfHwgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Byb2dyZXNzJykge1xuICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0gdmlkZW8uYnVmZmVyZWQuZW5kKGJ1ZmZlckxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTaW5jZVN0b3AgPSBEYXRlLm5vdygpIC0gdGhpcy5fdmlkZW9TdGFsbGVkO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5CdWZmZXJpbmcsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWVTaW5jZVN0b3B9LFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICdbJXNdIFslc10gW2J1ZmZlcmluZ10gU3RyZWFtIGhhcyByZWNvdmVyZWQgZnJvbSBzdGFsbCBhZnRlciBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZVN0b3ApLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICAgIHRoaXMuX3ZpZGVvU3RhbGxlZCA9IG51bGw7XG4gIH1cblxuICBvblZpZGVvUmVzb2x1dGlvbkNoYW5nZXMobmV3UmVzb2x1dGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZCxcbiAgICAgIHJ1bnRpbWU6IChEYXRlLm5vdygpIC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3N0cmluZzogbmV3UmVzb2x1dGlvbn0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLl92aWRlb1Jlc29sdXRpb24gPyB7c3RyaW5nOiB0aGlzLl92aWRlb1Jlc29sdXRpb259IDogdW5kZWZpbmVkLFxuICAgICAgc3RyZWFtSWQ6IHRoaXMuX3N0cmVhbUlkXG4gICAgfSk7XG5cbiAgICB0aGlzLl92aWRlb1Jlc29sdXRpb24gPSBuZXdSZXNvbHV0aW9uO1xuICB9XG59IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG5yZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50c1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|