@dcl/sdk 7.0.0-3039764556.commit-d9e186e → 7.0.0-3040253589.commit-8782388
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ecs7/index.js
CHANGED
@@ -8362,19 +8362,41 @@
|
|
8362
8362
|
};
|
8363
8363
|
|
8364
8364
|
/* eslint-disable */
|
8365
|
+
var TextAlign;
|
8366
|
+
(function (TextAlign) {
|
8367
|
+
TextAlign[TextAlign["Center"] = 0] = "Center";
|
8368
|
+
TextAlign[TextAlign["Left"] = 1] = "Left";
|
8369
|
+
TextAlign[TextAlign["Right"] = 2] = "Right";
|
8370
|
+
TextAlign[TextAlign["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
8371
|
+
})(TextAlign || (TextAlign = {}));
|
8372
|
+
var Font;
|
8373
|
+
(function (Font) {
|
8374
|
+
Font[Font["LiberationSans"] = 0] = "LiberationSans";
|
8375
|
+
Font[Font["SansSerif"] = 1] = "SansSerif";
|
8376
|
+
Font[Font["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
|
8377
|
+
})(Font || (Font = {}));
|
8365
8378
|
function createBasePBUiText() {
|
8366
|
-
return {
|
8379
|
+
return { value: '', color: undefined, textAlign: undefined, font: undefined, fontSize: undefined };
|
8367
8380
|
}
|
8368
8381
|
/**
|
8369
8382
|
* @internal
|
8370
8383
|
*/
|
8371
8384
|
const PBUiText = {
|
8372
8385
|
encode(message, writer = minimalExports.Writer.create()) {
|
8373
|
-
if (message.
|
8374
|
-
writer.uint32(10).string(message.
|
8386
|
+
if (message.value !== '') {
|
8387
|
+
writer.uint32(10).string(message.value);
|
8375
8388
|
}
|
8376
|
-
if (message.
|
8377
|
-
Color3.encode(message.
|
8389
|
+
if (message.color !== undefined) {
|
8390
|
+
Color3.encode(message.color, writer.uint32(18).fork()).ldelim();
|
8391
|
+
}
|
8392
|
+
if (message.textAlign !== undefined) {
|
8393
|
+
writer.uint32(24).int32(message.textAlign);
|
8394
|
+
}
|
8395
|
+
if (message.font !== undefined) {
|
8396
|
+
writer.uint32(32).int32(message.font);
|
8397
|
+
}
|
8398
|
+
if (message.fontSize !== undefined) {
|
8399
|
+
writer.uint32(40).int32(message.fontSize);
|
8378
8400
|
}
|
8379
8401
|
return writer;
|
8380
8402
|
},
|
@@ -8386,10 +8408,19 @@
|
|
8386
8408
|
const tag = reader.uint32();
|
8387
8409
|
switch (tag >>> 3) {
|
8388
8410
|
case 1:
|
8389
|
-
message.
|
8411
|
+
message.value = reader.string();
|
8390
8412
|
break;
|
8391
8413
|
case 2:
|
8392
|
-
message.
|
8414
|
+
message.color = Color3.decode(reader, reader.uint32());
|
8415
|
+
break;
|
8416
|
+
case 3:
|
8417
|
+
message.textAlign = reader.int32();
|
8418
|
+
break;
|
8419
|
+
case 4:
|
8420
|
+
message.font = reader.int32();
|
8421
|
+
break;
|
8422
|
+
case 5:
|
8423
|
+
message.fontSize = reader.int32();
|
8393
8424
|
break;
|
8394
8425
|
default:
|
8395
8426
|
reader.skipType(tag & 7);
|
@@ -11436,4 +11467,4 @@
|
|
11436
11467
|
Object.defineProperty(exports, '__esModule', { value: true });
|
11437
11468
|
|
11438
11469
|
})(this.self = this.self || {});
|
11439
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoQ29sbGlkZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hDb2xsaWRlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL09uUG9pbnRlclVwLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXBSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BvaW50ZXJFdmVudHMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1JheWNhc3RSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Qb2ludGVyTG9jay5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUmF5Y2FzdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUmF5Y2FzdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUmF5Y2FzdFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUZXh0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1VpVHJhbnNmb3JtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRyYW5zZm9ybS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaW5kZXguZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L1RyYW5zZm9ybS50cyIsIi4uL3NyYy9jb21wb25lbnRzL2luZGV4LnRzIiwiLi4vc3JjL3NjaGVtYXMvQXJyYXkudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9Cb29sZWFuLnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvRW51bS50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0Zsb2F0LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvSW50ZWdlci50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL1N0cmluZy50cyIsIi4uL3NyYy9zY2hlbWFzL01hcC50cyIsIi4uL3NyYy9zY2hlbWFzL09wdGlvbmFsLnRzIiwiLi4vc3JjL3NjaGVtYXMvaW5kZXgudHMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvaW5kZXguanMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyL2luZGV4LnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UudHMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9jcmR0L2NvbXBvbmVudE9wZXJhdGlvbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvaW5kZXgudHMiLCIuLi9zcmMvZW5naW5lL3JlYWRvbmx5LnRzIiwiLi4vc3JjL2VuZ2luZS9jb21wb25lbnQudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS11dGlscy50cyIsIi4uL3NyYy9lbmdpbmUvZW50aXR5LnRzIiwiLi4vc3JjL2VuZ2luZS9zeXN0ZW1zLnRzIiwiLi4vc3JjL2VuZ2luZS9pbmRleC50cyIsIi4uL3NyYy9lbmdpbmUvZXZlbnRzLnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyIsIi4uL3NyYy9ydW50aW1lL3RlbXAtZnAvT2JzZXJ2YWJsZS50cyIsIi4uL3NyYy9ydW50aW1lL29ic2VydmFibGVzLnRzIiwiLi4vc3JjL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jeWNsaWNQYXJlbnRpbmdDaGVja2VyLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2dsb2JhbC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvZ2xvYmFsLm5hbWVzcGFjZS5nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZlY3RvcjMgPSB2b2lkIDA7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFZlY3RvcjM7XG4oZnVuY3Rpb24gKFZlY3RvcjMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqL1xuICAgIHggPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKi9cbiAgICB5ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICB6ID0gMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6IH07XG4gICAgfVxuICAgIFZlY3RvcjMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHZlY3RvcjEgLSB0aGUgZmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHZlY3RvcjIgLSB0aGUgc2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHZlY3RvcjEsIHZlY3RvcjIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHZlY3RvcjEueCArIHZlY3RvcjIueCxcbiAgICAgICAgICAgIHk6IHZlY3RvcjEueSArIHZlY3RvcjIueSxcbiAgICAgICAgICAgIHo6IHZlY3RvcjEueiArIHZlY3RvcjIuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueCxcbiAgICAgICAgICAgIHk6IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueSxcbiAgICAgICAgICAgIHo6IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdFRvUmVmKG1pbnVlbmQsIHN1YnRyYWhlbmQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnk7XG4gICAgICAgIHJlc3VsdC56ID0gbWludWVuZC56IC0gc3VidHJhaGVuZC56O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0VG9SZWYgPSBzdWJ0cmFjdFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBvdGhlciBzaWduXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcHBvc2l0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB4OiAtdmFsdWUueCwgeTogLXZhbHVlLnksIHo6IC12YWx1ZS56IH07XG4gICAgfVxuICAgIFZlY3RvcjMub3Bwb3NpdGUgPSBvcHBvc2l0ZTtcbiAgICAvKipcbiAgICAgKiBDb3B5IHNvdXJjZSBpbnRvIGRlc3RcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHkoc291cmNlLCBkZXN0KSB7XG4gICAgICAgIGRlc3QueCA9IHNvdXJjZS54O1xuICAgICAgICBkZXN0LnkgPSBzb3VyY2UueTtcbiAgICAgICAgZGVzdC56ID0gc291cmNlLno7XG4gICAgfVxuICAgIFZlY3RvcjMuY29weSA9IGNvcHk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIHNhbWUgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5jbG9uZSA9IGNsb25lO1xuICAgIC8vIFByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0bzNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLno7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGVUb1JlZih2ZWN0b3IsIHNjYWxlLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSB2ZWN0b3IueCAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueSA9IHZlY3Rvci55ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC56ID0gdmVjdG9yLnogKiBzY2FsZTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZVRvUmVmID0gc2NhbGVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZSh2ZWN0b3IsIHNjYWxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUodmVjdG9yLnggKiBzY2FsZSwgdmVjdG9yLnkgKiBzY2FsZSwgdmVjdG9yLnogKiBzY2FsZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGUgPSBzY2FsZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoID0gbm9ybWFsaXplRnJvbUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCB8fCBsZW4gPT09IDEuMCkge1xuICAgICAgICAgICAgY29weSh2ZWN0b3IsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVUb1JlZih2ZWN0b3IsIDEuMCAvIGxlbiwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYgPSBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWY7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuZ3RoKHZlY3RvcikpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvUmVmKHZlY3RvciwgcmVzdWx0KSB7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZVRvUmVmID0gbm9ybWFsaXplVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUm90YXRlcyBjdXJyZW50IFZlY3RvcjMgYmFzZWQgb24gdGhlIGdpdmVuIHF1YXRlcm5pb24sIGJ1dCBhcHBsaWVzIHRoZSByb3RhdGlvbiB0byB0YXJnZXQgVmVjdG9yMy5cbiAgICAgKiBAcGFyYW0gcSAtIGRlZmluZXMgdGhlIFF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlKHZlY3RvciwgcSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHogfSA9IHZlY3RvcjtcbiAgICAgICAgY29uc3QgeyB4OiBxeCwgeTogcXksIHo6IHF6LCB3OiBxdyB9ID0gcTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5LFxuICAgICAgICAgICAgeTogaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xeixcbiAgICAgICAgICAgIHo6IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5yb3RhdGUgPSByb3RhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgdmVjdG9ycyBcInN0YXJ0XCIgYW5kIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwID0gbGVycDtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZyb20gdGhlIHZlY3RvciBcInN0YXJ0XCIgZm9yIFwiYW1vdW50XCIgdG8gdGhlIHZlY3RvciBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueSA9IHN0YXJ0LnkgKyAoZW5kLnkgLSBzdGFydC55KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnogPSBzdGFydC56ICsgKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycFRvUmVmID0gbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3MobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmVjdG9yMy5aZXJvKCk7XG4gICAgICAgIFZlY3RvcjMuY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zcyA9IGNyb3NzO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC55ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC56ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3NUb1JlZiA9IGNyb3NzVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5aZXJvID0gWmVybztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVuaXQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIE9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDEuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5PbmUgPSBPbmU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0b2xlbmd0aFNxdWFyZWQgKDAuMCwgMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdXAgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVwKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlVwID0gVXA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAtMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRG93bigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIC0xLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRG93biA9IERvd247XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBGb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkZvcndhcmQgPSBGb3J3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAtMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhY2t3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAtMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5CYWNrd2FyZCA9IEJhY2t3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgcmlnaHQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlJpZ2h0ID0gUmlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoLTEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgbGVmdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgtMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuTGVmdCA9IExlZnQ7XG59KShWZWN0b3IzID0gZXhwb3J0cy5WZWN0b3IzIHx8IChleHBvcnRzLlZlY3RvcjMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVjdG9yMy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2NhbGFyID0gdm9pZCAwO1xuLyoqXG4gKiBUd28gcGkgY29uc3RhbnRzIGNvbnZlbmllbnQgZm9yIGNvbXB1dGF0aW9uLlxuICovXG5jb25zdCBUd29QaSA9IE1hdGguUEkgKiAyO1xuLyoqXG4gKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHBhcmFtIGEgLSBudW1iZXJcbiAqIEBwYXJhbSBiIC0gbnVtYmVyXG4gKiBAcGFyYW0gZXBzaWxvbiAtIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICovXG5mdW5jdGlvbiB3aXRoaW5FcHNpbG9uKGEsIGIsIGVwc2lsb24gPSAxLjQwMTI5OGUtNDUpIHtcbiAgICBjb25zdCBudW0gPSBhIC0gYjtcbiAgICByZXR1cm4gLWVwc2lsb24gPD0gbnVtICYmIG51bSA8PSBlcHNpbG9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICogQHBhcmFtIGkgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqL1xuZnVuY3Rpb24gdG9IZXgoaSkge1xuICAgIGNvbnN0IHN0ciA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChpIDw9IDE1KSB7XG4gICAgICAgIHJldHVybiAoJzAnICsgc3RyKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG4vKipcbiAqIFJldHVybnMgLTEgaWYgdmFsdWUgaXMgbmVnYXRpdmUgYW5kICsxIGlzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICogQHBhcmFtIF92YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFsIHRvIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcbiAgICBpZiAoX3ZhbHVlID09PSAwIHx8IGlzTmFOKF92YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWx1ZSA+IDAgPyAxIDogLTE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGJldHdlZW4gbWluIGFuZCBtYXguXG4gKiBSZXR1cm5zIG1pbiBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBtaW4uXG4gKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjbG1hcFxuICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0gbWF4IC0gdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSlcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuLyoqXG4gKiB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2ZcbiAqIEByZXR1cm5zIHRoZSBsb2cyIG9mIHZhbHVlLlxuICovXG5mdW5jdGlvbiBsb2cyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHZhbHVlKSAqIE1hdGguTE9HMkU7XG59XG4vKipcbiAqIExvb3BzIHRoZSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9kdWxvIG9wZXJhdG9yIGJ1dCBpdCB3b3JrcyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gKiBGb3IgZXhhbXBsZSwgdXNpbmcgMy4wIGZvciB0IGFuZCAyLjUgZm9yIGxlbmd0aCwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjUuXG4gKiBXaXRoIHQgPSA1IGFuZCBsZW5ndGggPSAyLjUsIHRoZSByZXN1bHQgd291bGQgYmUgMC4wLlxuICogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgYmVoYXZpb3VyIGlzIG5vdCBkZWZpbmVkIGZvciBuZWdhdGl2ZSBudW1iZXJzIGFzIGl0IGlzIGZvciB0aGUgbW9kdWxvIG9wZXJhdG9yXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSB0aGUgbGVuZ3RoXG4gKiBAcmV0dXJucyB0aGUgbG9vcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gTWF0aC5mbG9vcih2YWx1ZSAvIGxlbmd0aCkgKiBsZW5ndGg7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIERlbm9ybWFsaXplIHRoZSB2YWx1ZSBmcm9tIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG5vcm1hbGl6ZWQgLSB2YWx1ZSB0byBkZW5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBkZW5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVub3JtYWxpemUobm9ybWFsaXplZCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZCAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xlcyBnaXZlbiBpbiBkZWdyZWVzLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgYW5nbGUgaW4gZGVncmVlc1xuICogQHJldHVybnMgdGhlIGRlbHRhXG4gKi9cbmZ1bmN0aW9uIGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbi8qKlxuICogUGluZ1BvbmdzIHRoZSB2YWx1ZSB0LCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIGxlbmd0aFxuICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIDAgYW5kIGxlbmd0aFxuICovXG5mdW5jdGlvbiBwaW5nUG9uZyh0eCwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdCA9IHJlcGVhdCh0eCwgbGVuZ3RoICogMi4wKTtcbiAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG4vKipcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExlcnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwXG4gKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFuZCBvdGhlciB0cmFuc2l0aW9ucy5cbiAqIEBwYXJhbSBmcm9tIC0gZnJvbVxuICogQHBhcmFtIHRvIC0gdG9cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc21vb3RoIHN0ZXBwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gc21vb3RoU3RlcChmcm9tLCB0bywgdHgpIHtcbiAgICBsZXQgdCA9IGNsYW1wKHR4KTtcbiAgICB0ID0gLTIuMCAqIHQgKiB0ICogdCArIDMuMCAqIHQgKiB0O1xuICAgIHJldHVybiB0byAqIHQgKyBmcm9tICogKDEuMCAtIHQpO1xufVxuLyoqXG4gKiBNb3ZlcyBhIHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLlxuICogTmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRhcmdldC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKE1hdGguYWJzKHRhcmdldCAtIGN1cnJlbnQpIDw9IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyBzaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTW92ZVRvd2FyZHMgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICpcbiAqIFZhcmlhYmxlcyBjdXJyZW50IGFuZCB0YXJnZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy4gRm9yIG9wdGltaXphdGlvbiByZWFzb25zLCBuZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGFcbiAqICBhcmUgbm90IHN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIG9zY2lsbGF0aW9uLiBUbyBwdXNoIGN1cnJlbnQgYXdheSBmcm9tIGEgdGFyZ2V0IGFuZ2xlLCBhZGQgMTgwIHRvIHRoYXQgYW5nbGUgaW5zdGVhZC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyBhbmdsZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkc0FuZ2xlKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBjb25zdCBudW0gPSBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBtb3ZlVG93YXJkcyhjdXJyZW50LCBjdXJyZW50ICsgbnVtLCBtYXhEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NhbGFyIHdpdGggdmFsdWVzIGxpbmVhcmx5IGludGVycG9sYXRlZCBvZiBcImFtb3VudFwiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBhbW91bnQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTGVycCBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKiBUaGUgcGFyYW1ldGVyIHQgaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFdLiBWYXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnBBbmdsZShzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgbnVtICogY2xhbXAoYW1vdW50KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGluZWFyIHBhcmFtZXRlciB0IHRoYXQgcHJvZHVjZXMgdGhlIGludGVycG9sYW50IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgW2EsIGJdLlxuICogQHBhcmFtIGEgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGIgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGJldHdlZW4gYSBhbmQgYlxuICogQHJldHVybnMgdGhlIGludmVyc2VMZXJwIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGludmVyc2VMZXJwKGEsIGIsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgcmVzdWx0ID0gY2xhbXAoKHZhbHVlIC0gYSkgLyAoYiAtIGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IDAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBzY2FsYXIgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBIZXJtaXRlIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBzY2FsYXJzIFwidmFsdWUxXCIsIFwidmFsdWUzXCIsIFwidGFuZ2VudDFcIiwgXCJ0YW5nZW50MlwiLlxuICoge0BsaW5rIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vSGVybWl0ZVBvbHlub21pYWwuaHRtbH1cbiAqIEBwYXJhbSB2YWx1ZTEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlMiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gaW5wdXQgdmFsdWVcbiAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGhlcm1pdGUodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50MiwgYW1vdW50KSB7XG4gICAgY29uc3Qgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDtcbiAgICBjb25zdCBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDEgPSAyLjAgKiBjdWJlZCAtIDMuMCAqIHNxdWFyZWQgKyAxLjA7XG4gICAgY29uc3QgcGFydDIgPSAtMi4wICogY3ViZWQgKyAzLjAgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQzID0gY3ViZWQgLSAyLjAgKiBzcXVhcmVkICsgYW1vdW50O1xuICAgIGNvbnN0IHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkO1xuICAgIHJldHVybiB2YWx1ZTEgKiBwYXJ0MSArIHZhbHVlMiAqIHBhcnQyICsgdGFuZ2VudDEgKiBwYXJ0MyArIHRhbmdlbnQyICogcGFydDQ7XG59XG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZSBvZiByYW5kb21cbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWUgb2YgcmFuZG9tXG4gKiBAcmV0dXJucyByYW5kb20gdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmFuZ2UobWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUpXG4gKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKVxuICogQHBhcmFtIG51bSAtIHRvIGNvbnZlcnQgdG8gcGVyY2VudGFnZVxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIHBlcmNlbnRhZ2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1BlcmNlbnQobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobnVtIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBlcmNlbnRhZ2UgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBQZXJjZW50VG9SYW5nZSgwLjM0LDAsMTAwKSB3aWxsIHJldHVybiAzNC5cbiAqIEBwYXJhbSBwZXJjZW50IC0gdG8gY29udmVydCB0byBudW1iZXJcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gcGVyY2VudFRvUmFuZ2UocGVyY2VudCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG1heCAtIG1pbikgKiBwZXJjZW50ICsgbWluO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbmdsZSBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCB2YWx1ZSBiZXR3ZWVuIC1NYXRoLlBJIGFuZCBNYXRoLlBJIHJhZGlhbnMuXG4gKiBAcGFyYW0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplIGluIHJhZGlhbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgYW5nbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGUpIHtcbiAgICAvLyBNb3JlIHByZWNpc2UgYnV0IHNsb3dlciB2ZXJzaW9uIGtlcHQgZm9yIHJlZmVyZW5jZS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb21tZW50ZWQtb3V0LWNvZGVcbiAgICAvKlxuICAgICAgLy8gYW5nbGUgPSBhbmdsZSAlIFRvb2xzLlR3b1BpO1xuICAgICAgLy8gYW5nbGUgPSAoYW5nbGUgKyBUb29scy5Ud29QaSkgJSBUb29scy5Ud29QaTtcbiAgXG4gICAgICAvL2lmIChhbmdsZSA+IE1hdGguUEkpIHtcbiAgICAgIC8vXHRhbmdsZSAtPSBUb29scy5Ud29QaTtcbiAgICAgIC8vfVxuICAgICAgICAqL1xuICAgIHJldHVybiBhbmdsZSAtIFR3b1BpICogTWF0aC5mbG9vcigoYW5nbGUgKyBNYXRoLlBJKSAvIFR3b1BpKTtcbn1cbi8qKlxuICogU2NhbGFyIGNvbXB1dGF0aW9uIGxpYnJhcnlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5TY2FsYXIgPSB7XG4gICAgd2l0aGluRXBzaWxvbixcbiAgICB0b0hleCxcbiAgICBzaWduLFxuICAgIGNsYW1wLFxuICAgIGxvZzIsXG4gICAgcmVwZWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICBkZW5vcm1hbGl6ZSxcbiAgICBkZWx0YUFuZ2xlLFxuICAgIHBpbmdQb25nLFxuICAgIHNtb290aFN0ZXAsXG4gICAgbW92ZVRvd2FyZHMsXG4gICAgbW92ZVRvd2FyZHNBbmdsZSxcbiAgICBsZXJwLFxuICAgIGxlcnBBbmdsZSxcbiAgICBpbnZlcnNlTGVycCxcbiAgICBoZXJtaXRlLFxuICAgIHJhbmRvbVJhbmdlLFxuICAgIHJhbmdlVG9QZXJjZW50LFxuICAgIHBlcmNlbnRUb1JhbmdlLFxuICAgIG5vcm1hbGl6ZVJhZGlhbnMsXG4gICAgVHdvUGlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2FsYXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJBRDJERUcgPSBleHBvcnRzLkRFRzJSQUQgPSBleHBvcnRzLkVwc2lsb24gPSBleHBvcnRzLlRvTGluZWFyU3BhY2UgPSBleHBvcnRzLlRvR2FtbWFTcGFjZSA9IGV4cG9ydHMuU3BhY2UgPSBleHBvcnRzLk9yaWVudGF0aW9uID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZpbmVzIHBvdGVudGlhbCBvcmllbnRhdGlvbiBmb3IgYmFjayBmYWNlIGN1bGxpbmdcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE9yaWVudGF0aW9uO1xuKGZ1bmN0aW9uIChPcmllbnRhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENsb2Nrd2lzZVxuICAgICAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ1dcIl0gPSAwXSA9IFwiQ1dcIjtcbiAgICAvKiogQ291bnRlciBjbG9ja3dpc2UgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNDV1wiXSA9IDFdID0gXCJDQ1dcIjtcbn0pKE9yaWVudGF0aW9uID0gZXhwb3J0cy5PcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5PcmllbnRhdGlvbiA9IHt9KSk7XG4vKipcbiAqIERlZmluZXMgc3VwcG9ydGVkIHNwYWNlc1xuICogQHB1YmxpY1xuICovXG52YXIgU3BhY2U7XG4oZnVuY3Rpb24gKFNwYWNlKSB7XG4gICAgLyoqIExvY2FsIChvYmplY3QpIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJMT0NBTFwiXSA9IDBdID0gXCJMT0NBTFwiO1xuICAgIC8qKiBXb3JsZCBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiV09STERcIl0gPSAxXSA9IFwiV09STERcIjtcbiAgICAvKiogQm9uZSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiQk9ORVwiXSA9IDJdID0gXCJCT05FXCI7XG59KShTcGFjZSA9IGV4cG9ydHMuU3BhY2UgfHwgKGV4cG9ydHMuU3BhY2UgPSB7fSkpO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvR2FtbWFTcGFjZSA9IDEgLyAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGxpbmVhciBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvTGluZWFyU3BhY2UgPSAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbWFsIG51bWJlciB2YWx1ZSBpbiBCYWJ5bG9uLmpzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuRXBzaWxvbiA9IDAuMDAwMDAxO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSBFdWxlciBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5ERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gcmFkaWFucyB0byBFdWxlciBkZWdyZWVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuUkFEMkRFRyA9IDM2MCAvIChNYXRoLlBJICogMik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVhdGVybmlvbiA9IHZvaWQgMDtcbmNvbnN0IFZlY3RvcjNfMSA9IHJlcXVpcmUoXCIuL1ZlY3RvcjNcIik7XG5jb25zdCBTY2FsYXJfMSA9IHJlcXVpcmUoXCIuL1NjYWxhclwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUXVhdGVybmlvbjtcbihmdW5jdGlvbiAoUXVhdGVybmlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBmbG9hdHNcbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHcgLSBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHggPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeSA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHogPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkgKi9cbiAgICB3ID0gMS4wKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHosIHcgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBRdWF0ZXJuaW9uIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gcXVhdGVybmlvbnMuXG4gICAgICogQHBhcmFtIHExIC0gdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcTIgLSB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQocTEsIHEyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IHExLnggKyBxMi54LCB5OiBxMS55ICsgcTIueSwgejogcTEueiArIHEyLnosIHc6IHExLncgKyBxMi53IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHlhdywgcGl0Y2gsIHJvbGwpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMywgczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzLCBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzMsIGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGwgPSByb3RhdGlvbllhd1BpdGNoUm9sbDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcm90YXRpb24gdGhhdCByb3RhdGVzIHogZGVncmVlcyBhcm91bmQgdGhlIHogYXhpcywgeCBkZWdyZWVzIGFyb3VuZCB0aGUgeCBheGlzLCBhbmQgeSBkZWdyZWVzIGFyb3VuZCB0aGUgeSBheGlzLlxuICAgICAqIEBwYXJhbSB4IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB4IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB5IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB5IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB6IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB6IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyKHgsIHksIHopIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHkgKiB0eXBlc18xLkRFRzJSQUQsIHggKiB0eXBlc18xLkRFRzJSQUQsIHogKiB0eXBlc18xLkRFRzJSQUQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyID0gZXVsZXI7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgocSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGxlbmd0aFNxdWFyZWQocSkpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQocSkge1xuICAgICAgICByZXR1cm4gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgcXVhdGVybmlvbnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gKGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0LncpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gdHdvIHJvdGF0aW9ucyBhIGFuZCBiLlxuICAgICAqIEBwYXJhbSBxdWF0MSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcXVhdDIgLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuZ2xlKHF1YXQxLCBxdWF0Mikge1xuICAgICAgICBjb25zdCBkb3RWYWwgPSBkb3QocXVhdDEsIHF1YXQyKTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLmFicyhkb3RWYWwpLCAxKSkgKiAyICogdHlwZXNfMS5SQUQyREVHO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlID0gYW5nbGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZyb20gcXVhdGVybmlvbiBpcyByb3RhdGVkIHRvd2FyZHMgdG8gYnkgYW4gYW5ndWxhciBzdGVwIG9mIG1heERlZ3JlZXNEZWx0YS5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBtYXhEZWdyZWVzRGVsdGEgLSB0aGUgaW50ZXJ2YWwgc3RlcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZVRvd2FyZHMoZnJvbSwgdG8sIG1heERlZ3JlZXNEZWx0YSkge1xuICAgICAgICBjb25zdCBudW0gPSBhbmdsZShmcm9tLCB0byk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgbWF4RGVncmVlc0RlbHRhIC8gbnVtKTtcbiAgICAgICAgcmV0dXJuIHNsZXJwKGZyb20sIHRvLCB0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGVUb3dhcmRzID0gcm90YXRlVG93YXJkcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGZvcndhcmQgYW5kIHVwd2FyZHMgZGlyZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gZm9yd2FyZCAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpblxuICAgICAqIEBwYXJhbSB1cCAtIHRoZSB2ZWN0b3IgdGhhdCBkZWZpbmVzIGluIHdoaWNoIGRpcmVjdGlvbiB1cCBpc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvb2tSb3RhdGlvbihmb3J3YXJkLCB1cCA9IHsgeDogMC4wLCB5OiAxLjAsIHo6IDAuMCB9KSB7XG4gICAgICAgIGNvbnN0IGZvcndhcmROZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHVwLCBmb3J3YXJkTmV3KSk7XG4gICAgICAgIGNvbnN0IHVwTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3MoZm9yd2FyZE5ldywgcmlnaHQpO1xuICAgICAgICBjb25zdCBtMDAgPSByaWdodC54O1xuICAgICAgICBjb25zdCBtMDEgPSByaWdodC55O1xuICAgICAgICBjb25zdCBtMDIgPSByaWdodC56O1xuICAgICAgICBjb25zdCBtMTAgPSB1cE5ldy54O1xuICAgICAgICBjb25zdCBtMTEgPSB1cE5ldy55O1xuICAgICAgICBjb25zdCBtMTIgPSB1cE5ldy56O1xuICAgICAgICBjb25zdCBtMjAgPSBmb3J3YXJkTmV3Lng7XG4gICAgICAgIGNvbnN0IG0yMSA9IGZvcndhcmROZXcueTtcbiAgICAgICAgY29uc3QgbTIyID0gZm9yd2FyZE5ldy56O1xuICAgICAgICBjb25zdCBudW04ID0gbTAwICsgbTExICsgbTIyO1xuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gY3JlYXRlKCk7XG4gICAgICAgIGlmIChudW04ID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bSA9IE1hdGguc3FydChudW04ICsgMSk7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSBudW0gKiAwLjU7XG4gICAgICAgICAgICBudW0gPSAwLjUgLyBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEyIC0gbTIxKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjAgLSBtMDIpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMSAtIG0xMCkgKiBudW07XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTAwID49IG0xMSAmJiBtMDAgPj0gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW03ID0gTWF0aC5zcXJ0KDEgKyBtMDAgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtNCA9IDAuNSAvIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAwLjUgKiBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0wMSArIG0xMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMiArIG0yMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0xMiAtIG0yMSkgKiBudW00O1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0xMSA+IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IE1hdGguc3FydCgxICsgbTExIC0gbTAwIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTMgPSAwLjUgLyBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMCArIG0wMSkgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gMC41ICogbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMjEgKyBtMTIpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMjAgLSBtMDIpICogbnVtMztcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLnNxcnQoMSArIG0yMiAtIG0wMCAtIG0xMSk7XG4gICAgICAgIGNvbnN0IG51bTIgPSAwLjUgLyBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTIwICsgbTAyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjEgKyBtMTIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi56ID0gMC41ICogbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi53ID0gKG0wMSAtIG0xMCkgKiBudW0yO1xuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sb29rUm90YXRpb24gPSBsb29rUm90YXRpb247XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGluIHBsYWNlIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUocSkge1xuICAgICAgICBjb25zdCBxTGVuZ3RoID0gMS4wIC8gbGVuZ3RoKHEpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKHEueCAqIHFMZW5ndGgsIHEueSAqIHFMZW5ndGgsIHEueiAqIHFMZW5ndGgsIHEudyAqIHFMZW5ndGgpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2hpY2ggcm90YXRlcyBmcm9tIGZyb21EaXJlY3Rpb24gdG8gdG9EaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgdGFyZ2V0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tVG9Sb3RhdGlvbihmcm9tLCB0bywgdXAgPSBWZWN0b3IzXzEuVmVjdG9yMy5VcCgpKSB7XG4gICAgICAgIC8vIFVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBpbXBsZW1lbnRlZCBmcm9tIGh0dHBzOi8vZm9ydW0udW5pdHkuY29tL3RocmVhZHMvcXVhdGVybmlvbi1sb29rcm90YXRpb24tYXJvdW5kLWFuLWF4aXMuNjA4NDcwLyNwb3N0LTQwNjk4ODhcbiAgICAgICAgY29uc3QgdjAgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZnJvbSk7XG4gICAgICAgIGNvbnN0IHYxID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKHRvKTtcbiAgICAgICAgY29uc3QgYSA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHYwLCB2MSk7XG4gICAgICAgIGNvbnN0IHcgPSBNYXRoLnNxcnQoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MCkgKiBWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYxKSkgK1xuICAgICAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuZG90KHYwLCB2MSk7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGEpIDwgMC4wMDAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmVjdG9ycyBhcmUgcGFyYWxsZWwsIGNoZWNrIHcgdG8gZmluZCBkaXJlY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIHcgaXMgMCB0aGVuIHZhbHVlcyBhcmUgb3Bwb3NpdGUsIGFuZCB3ZSBzb3VsZCByb3RhdGUgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBzdXBwbGllZCBheGlzXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHZlY3RvcnMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFuZCBubyByb3RhdGlvbiBzaG91bGQgb2NjdXJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh3KSA8IDAuMDAwMVxuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplKGNyZWF0ZSh1cC54LCB1cC55LCB1cC56LCAwKSlcbiAgICAgICAgICAgICAgICA6IElkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGNyZWF0ZShhLngsIGEueSwgYS56LCB3KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tVG9Sb3RhdGlvbiA9IGZyb21Ub1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIC0gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLklkZW50aXR5ID0gSWRlbnRpdHk7XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBldWxlciBhbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcm90YXRpb24uXG4gICAgICogSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyQW5nbGVzKHEpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gVmVjdG9yM18xLlZlY3RvcjMuY3JlYXRlKCk7XG4gICAgICAgIC8vIGlmIHRoZSBpbnB1dCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgaXMgZXhhY3RseSBvbmUuIE90aGVyd2lzZSwgdGhpcyBhY3RzIGFzIGEgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBxdWF0ZXJuaW9uJ3Mgbm90LW5vcm1hbGl6ZWRuZXNzXG4gICAgICAgIGNvbnN0IHVuaXQgPSBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgICAgIC8vIHEgd2lsbCBoYXZlIGEgbWFnbml0dWRlIG9mIDAuNSBvciBncmVhdGVyIGlmIGFuZCBvbmx5IGlmIHEgaXMgYSBzaW5ndWxhcml0eSBjYXNlXG4gICAgICAgIGNvbnN0IHRlc3QgPSBxLnggKiBxLncgLSBxLnkgKiBxLno7XG4gICAgICAgIGlmICh0ZXN0ID4gMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgbm9ydGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlc3QgPCAtMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgc291dGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IC0yICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzaW5ndWxhcml0eSAtIHEgaXMgdGhlIG1ham9yaXR5IG9mIGNhc2VzXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguYXNpbigyICogKHEudyAqIHEueCAtIHEueSAqIHEueikpO1xuICAgICAgICAgICAgb3V0LnkgPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnkgKyAyICogcS56ICogcS54LCAxIC0gMiAqIChxLnggKiBxLnggKyBxLnkgKiBxLnkpKTtcbiAgICAgICAgICAgIG91dC56ID0gTWF0aC5hdGFuMigyICogcS53ICogcS56ICsgMiAqIHEueCAqIHEueSwgMSAtIDIgKiAocS56ICogcS56ICsgcS54ICogcS54KSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnggKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueSAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC56ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBkZWdyZWUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDM2MFxuICAgICAgICBvdXQueCA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LngsIDM2MCk7XG4gICAgICAgIG91dC55ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueSwgMzYwKTtcbiAgICAgICAgb3V0LnogPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC56LCAzNjApO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyQW5nbGVzID0gZXVsZXJBbmdsZXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXN1bHQueCA9IGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMztcbiAgICAgICAgcmVzdWx0LnkgPSBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczM7XG4gICAgICAgIHJlc3VsdC56ID0gYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzO1xuICAgICAgICByZXN1bHQudyA9IGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmID0gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZjtcbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gZGVmaW5lcyB0aGUgc291cmNlIG1hdHJpeFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdHJpeCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXRyaXguX207XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTtcbiAgICAgICAgY29uc3QgbTIxID0gZGF0YVsxXSwgbTIyID0gZGF0YVs1XSwgbTIzID0gZGF0YVs5XTtcbiAgICAgICAgY29uc3QgbTMxID0gZGF0YVsyXSwgbTMyID0gZGF0YVs2XSwgbTMzID0gZGF0YVsxMF07XG4gICAgICAgIC8vIHRzbGludDplbmFibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCB0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcbiAgICAgICAgbGV0IHM7XG4gICAgICAgIGlmICh0cmFjZSA+IDApIHtcbiAgICAgICAgICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjI1IC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0zMiAtIG0yMykgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEzIC0gbTMxKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjEgLSBtMTIpICogcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMTEgPiBtMjIgJiYgbTExID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMzIgLSBtMjMpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0yMiA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTEzIC0gbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMSAtIG0xMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gMC4yNSAqIHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnAobGVmdCwgcmlnaHQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwID0gc2xlcnA7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zIGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIGxldCBudW0yO1xuICAgICAgICBsZXQgbnVtMztcbiAgICAgICAgbGV0IG51bTQgPSBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobnVtNCA8IDApIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgbnVtNCA9IC1udW00O1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHtcbiAgICAgICAgICAgIG51bTMgPSAxIC0gYW1vdW50O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguYWNvcyhudW00KTtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSAxLjAgLyBNYXRoLnNpbihudW01KTtcbiAgICAgICAgICAgIG51bTMgPSBNYXRoLnNpbigoMS4wIC0gYW1vdW50KSAqIG51bTUpICogbnVtNjtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02XG4gICAgICAgICAgICAgICAgOiBNYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnggPSBudW0zICogbGVmdC54ICsgbnVtMiAqIHJpZ2h0Lng7XG4gICAgICAgIHJlc3VsdC55ID0gbnVtMyAqIGxlZnQueSArIG51bTIgKiByaWdodC55O1xuICAgICAgICByZXN1bHQueiA9IG51bTMgKiBsZWZ0LnogKyBudW0yICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LncgPSBudW0zICogbGVmdC53ICsgbnVtMiAqIHJpZ2h0Lnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZiA9IHNsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseShzZWxmLCBxMSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCwgMS4wKTtcbiAgICAgICAgbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIFwicmVzdWx0XCIgYXMgdGhlIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzZWxmLnggKiBxMS53ICsgc2VsZi55ICogcTEueiAtIHNlbGYueiAqIHExLnkgKyBzZWxmLncgKiBxMS54O1xuICAgICAgICByZXN1bHQueSA9IC1zZWxmLnggKiBxMS56ICsgc2VsZi55ICogcTEudyArIHNlbGYueiAqIHExLnggKyBzZWxmLncgKiBxMS55O1xuICAgICAgICByZXN1bHQueiA9IHNlbGYueCAqIHExLnkgLSBzZWxmLnkgKiBxMS54ICsgc2VsZi56ICogcTEudyArIHNlbGYudyAqIHExLno7XG4gICAgICAgIHJlc3VsdC53ID0gLXNlbGYueCAqIHExLnggLSBzZWxmLnkgKiBxMS55IC0gc2VsZi56ICogcTEueiArIHNlbGYudyAqIHExLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZiA9IG11bHRpcGx5VG9SZWY7XG4gICAgZnVuY3Rpb24gYW5nbGVBeGlzKGRlZ3Jlc3MsIGF4aXMpIHtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYXhpcykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSWRlbnRpdHkoKTtcbiAgICAgICAgbGV0IHJhZGlhbnMgPSBkZWdyZXNzICogdHlwZXNfMS5ERUcyUkFEO1xuICAgICAgICByYWRpYW5zICo9IDAuNTtcbiAgICAgICAgY29uc3QgYTIgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoYXhpcyk7XG4gICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLnNjYWxlVG9SZWYoYTIsIE1hdGguc2luKHJhZGlhbnMpLCBhMik7XG4gICAgICAgIHJlc3VsdC54ID0gYTIueDtcbiAgICAgICAgcmVzdWx0LnkgPSBhMi55O1xuICAgICAgICByZXN1bHQueiA9IGEyLno7XG4gICAgICAgIHJlc3VsdC53ID0gTWF0aC5jb3MocmFkaWFucyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUocmVzdWx0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZUF4aXMgPSBhbmdsZUF4aXM7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHplcm8gZmlsbGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uWmVybyA9IFplcm87XG59KShRdWF0ZXJuaW9uID0gZXhwb3J0cy5RdWF0ZXJuaW9uIHx8IChleHBvcnRzLlF1YXRlcm5pb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVhdGVybmlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1F1YXRlcm5pb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1ZlY3RvcjNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbmRleFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgYmFzZTY0IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgYmFzZTY0ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBieXRlIGxlbmd0aCBvZiBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbmJhc2U2NC5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgcCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICBpZiAoIXApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgbiA9IDA7XHJcbiAgICB3aGlsZSAoLS1wICUgNCA+IDEgJiYgc3RyaW5nLmNoYXJBdChwKSA9PT0gXCI9XCIpXHJcbiAgICAgICAgKytuO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChzdHJpbmcubGVuZ3RoICogMykgLyA0IC0gbjtcclxufTtcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGluZyB0YWJsZVxyXG52YXIgYjY0ID0gbmV3IEFycmF5KDY0KTtcclxuXHJcbi8vIEJhc2U2NCBkZWNvZGluZyB0YWJsZVxyXG52YXIgczY0ID0gbmV3IEFycmF5KDEyMyk7XHJcblxyXG4vLyA2NS4uOTAsIDk3Li4xMjIsIDQ4Li41NywgNDMsIDQ3XHJcbmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7KVxyXG4gICAgczY0W2I2NFtpXSA9IGkgPCAyNiA/IGkgKyA2NSA6IGkgPCA1MiA/IGkgKyA3MSA6IGkgPCA2MiA/IGkgLSA0IDogaSAtIDU5IHwgNDNdID0gaSsrO1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYSBidWZmZXIgdG8gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqL1xyXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdO1xyXG4gICAgdmFyIGkgPSAwLCAvLyBvdXRwdXQgaW5kZXhcclxuICAgICAgICBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHZhciBiID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgPj4gMl07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAzKSA8PCA0O1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA0XTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDE1KSA8PCAyO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA2XTtcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiAmIDYzXTtcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaikge1xyXG4gICAgICAgIGNodW5rW2krK10gPSBiNjRbdF07XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxudmFyIGludmFsaWRFbmNvZGluZyA9IFwiaW52YWxpZCBlbmNvZGluZ1wiO1xyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cclxuICogQHRocm93cyB7RXJyb3J9IElmIGVuY29kaW5nIGlzIGludmFsaWRcclxuICovXHJcbmJhc2U2NC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0O1xyXG4gICAgdmFyIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gNjEgJiYgaiA+IDEpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGlmICgoYyA9IHM2NFtjXSkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gdCA8PCAyIHwgKGMgJiA0OCkgPj4gNDtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMTUpIDw8IDQgfCAoYyAmIDYwKSA+PiAyO1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAzKSA8PCA2IHwgYztcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcHBlYXJzIHRvIGJlIGJhc2U2NCBlbmNvZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byB0ZXN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcHJvYmFibHkgYmFzZTY0IGVuY29kZWQsIG90aGVyd2lzZSBmYWxzZVxyXG4gKi9cclxuYmFzZTY0LnRlc3QgPSBmdW5jdGlvbiB0ZXN0KHN0cmluZykge1xyXG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHN0cmluZyk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UuXHJcbiAqIEBjbGFzc2Rlc2MgQSBtaW5pbWFsIGV2ZW50IGVtaXR0ZXIuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIExpc3RlbmVyXHJcbiAqIEBwYXJhbSB7Kn0gW2N0eF0gTGlzdGVuZXIgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2dCwgZm4sIGN0eCkge1xyXG4gICAgKHRoaXMuX2xpc3RlbmVyc1tldnRdIHx8ICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdKSkucHVzaCh7XHJcbiAgICAgICAgZm4gIDogZm4sXHJcbiAgICAgICAgY3R4IDogY3R4IHx8IHRoaXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBvciBhbnkgbWF0Y2hpbmcgbGlzdGVuZXJzIGlmIGFyZ3VtZW50cyBhcmUgb21pdHRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtldnRdIEV2ZW50IG5hbWUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBpZiBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIExpc3RlbmVyIHRvIHJlbW92ZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIG9mIGBldnRgIGlmIG9taXR0ZWQuXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldnQsIGZuKSB7XHJcbiAgICBpZiAoZXZ0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4pXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICArK2k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdHMgYW4gZXZlbnQgYnkgY2FsbGluZyBpdHMgbGlzdGVuZXJzIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2dCkge1xyXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2krK10uY3R4LCBhcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gaW5xdWlyZTtcclxuXHJcbi8qKlxyXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSBvbmx5IGlmIGF2YWlsYWJsZS5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgTW9kdWxlIHRvIHJlcXVpcmVcclxuICogQHJldHVybnMgez9PYmplY3R9IFJlcXVpcmVkIG1vZHVsZSBpZiBhdmFpbGFibGUgYW5kIG5vdCBlbXB0eSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKi9cclxuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBtb2QgPSBldmFsKFwicXVpcmVcIi5yZXBsYWNlKC9eLyxcInJlXCIpKShtb2R1bGVOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXHJcbiAgICAgICAgaWYgKG1vZCAmJiAobW9kLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhtb2QpLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgVVRGOCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIHV0ZjggPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFVURjggYnl0ZSBsZW5ndGggb2YgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG51dGY4Lmxlbmd0aCA9IGZ1bmN0aW9uIHV0ZjhfbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIGxlbiA9IDAsXHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXHJcbiAgICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIGVsc2UgaWYgKChjICYgMHhGQzAwKSA9PT0gMHhEODAwICYmIChzdHJpbmcuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBsZW4gKz0gNDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgbGVuICs9IDM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHJlYWRcclxuICovXHJcbnV0ZjgucmVhZCA9IGZ1bmN0aW9uIHV0ZjhfcmVhZChidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdLFxyXG4gICAgICAgIGkgPSAwLCAvLyBjaGFyIG9mZnNldFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHQgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgaWYgKHQgPCAxMjgpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSB0O1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBlbHNlIGlmICh0ID4gMjM5ICYmIHQgPCAzNjUpIHtcclxuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzKSAtIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweERDMDAgKyAodCAmIDEwMjMpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSBzdHJpbmcgYXMgVVRGOCBieXRlcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlcyB3cml0dGVuXHJcbiAqL1xyXG51dGY4LndyaXRlID0gZnVuY3Rpb24gdXRmOF93cml0ZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQsXHJcbiAgICAgICAgYzEsIC8vIGNoYXJhY3RlciAxXHJcbiAgICAgICAgYzI7IC8vIGNoYXJhY3RlciAyXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMxID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMxIDwgMTI4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGMxIDwgMjA0OCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgICAgICB8IDE5MjtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoYzEgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKChjMiA9IHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgYzEgPSAweDEwMDAwICsgKChjMSAmIDB4MDNGRikgPDwgMTApICsgKGMyICYgMHgwM0ZGKTtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTggICAgICB8IDI0MDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgICAgICB8IDIyNDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IExvbmdCaXRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzLlxuICogQGNsYXNzZGVzYyBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWUuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbG8gTG93IDMyIGJpdHMsIHVuc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gaGkgSGlnaCAzMiBiaXRzLCB1bnNpZ25lZFxuICovXG5mdW5jdGlvbiBMb25nQml0cyhsbywgaGkpIHtcblxuICAgIC8vIG5vdGUgdGhhdCB0aGUgY2FzdHMgYmVsb3cgYXJlIHRoZW9yZXRpY2FsbHkgdW5uZWNlc3NhcnkgYXMgb2YgdG9kYXksIGJ1dCBvbGRlciBzdGF0aWNhbGx5XG4gICAgLy8gZ2VuZXJhdGVkIGNvbnZlcnRlciBjb2RlIG1pZ2h0IHN0aWxsIGNhbGwgdGhlIGN0b3Igd2l0aCBzaWduZWQgMzJiaXRzLiBrZXB0IGZvciBjb21wYXQuXG5cbiAgICAvKipcbiAgICAgKiBMb3cgYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubG8gPSBsbyA+Pj4gMDtcblxuICAgIC8qKlxuICAgICAqIEhpZ2ggYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGkgPSBoaSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBaZXJvIGJpdHMuXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3V0aWwuTG9uZ0JpdHN9XG4gKi9cbnZhciB6ZXJvID0gTG9uZ0JpdHMuemVybyA9IG5ldyBMb25nQml0cygwLCAwKTtcblxuemVyby50b051bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbnplcm8uenpFbmNvZGUgPSB6ZXJvLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuemVyby5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH07XG5cbi8qKlxuICogWmVybyBoYXNoLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbnZhciB6ZXJvSGFzaCA9IExvbmdCaXRzLnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIG51bWJlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb21OdW1iZXIgPSBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMDtcbiAgICBpZiAoc2lnbilcbiAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgdmFyIGxvID0gdmFsdWUgPj4+IDAsXG4gICAgICAgIGhpID0gKHZhbHVlIC0gbG8pIC8gNDI5NDk2NzI5NiA+Pj4gMDtcbiAgICBpZiAoc2lnbikge1xuICAgICAgICBoaSA9IH5oaSA+Pj4gMDtcbiAgICAgICAgbG8gPSB+bG8gPj4+IDA7XG4gICAgICAgIGlmICgrK2xvID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKCsraGkgPiA0Mjk0OTY3Mjk1KVxuICAgICAgICAgICAgICAgIGhpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKGxvLCBoaSk7XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIGEgbnVtYmVyLCBsb25nIG9yIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICAgICAgdmFsdWUgPSB1dGlsLkxvbmcuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubG93IHx8IHZhbHVlLmhpZ2ggPyBuZXcgTG9uZ0JpdHModmFsdWUubG93ID4+PiAwLCB2YWx1ZS5oaWdoID4+PiAwKSA6IHplcm87XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgcG9zc2libHkgdW5zYWZlIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBQb3NzaWJseSB1bnNhZmUgbnVtYmVyXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKHVuc2lnbmVkKSB7XG4gICAgaWYgKCF1bnNpZ25lZCAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgICB2YXIgbG8gPSB+dGhpcy5sbyArIDEgPj4+IDAsXG4gICAgICAgICAgICBoaSA9IH50aGlzLmhpICAgICA+Pj4gMDtcbiAgICAgICAgaWYgKCFsbylcbiAgICAgICAgICAgIGhpID0gaGkgKyAxID4+PiAwO1xuICAgICAgICByZXR1cm4gLShsbyArIGhpICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgbG9uZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd9IExvbmdcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh1bnNpZ25lZCkge1xuICAgIHJldHVybiB1dGlsLkxvbmdcbiAgICAgICAgPyBuZXcgdXRpbC5Mb25nKHRoaXMubG8gfCAwLCB0aGlzLmhpIHwgMCwgQm9vbGVhbih1bnNpZ25lZCkpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogeyBsb3c6IHRoaXMubG8gfCAwLCBoaWdoOiB0aGlzLmhpIHwgMCwgdW5zaWduZWQ6IEJvb2xlYW4odW5zaWduZWQpIH07XG59O1xuXG52YXIgY2hhckNvZGVBdCA9IFN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gQml0c1xuICovXG5Mb25nQml0cy5mcm9tSGFzaCA9IGZ1bmN0aW9uIGZyb21IYXNoKGhhc2gpIHtcbiAgICBpZiAoaGFzaCA9PT0gemVyb0hhc2gpXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMoXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDApXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDEpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMykgPDwgMjQpID4+PiAwXG4gICAgLFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCA0KVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA1KSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDYpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDcpIDw8IDI0KSA+Pj4gMFxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvSGFzaCA9IGZ1bmN0aW9uIHRvSGFzaCgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgdGhpcy5sbyAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMjQgICAgICAsXG4gICAgICAgIHRoaXMuaGkgICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDI0XG4gICAgKTtcbn07XG5cbi8qKlxuICogWmlnLXphZyBlbmNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpFbmNvZGUgPSBmdW5jdGlvbiB6ekVuY29kZSgpIHtcbiAgICB2YXIgbWFzayA9ICAgdGhpcy5oaSA+PiAzMTtcbiAgICB0aGlzLmhpICA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5sbyAgPSAoIHRoaXMubG8gPDwgMSAgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGRlY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekRlY29kZSA9IGZ1bmN0aW9uIHp6RGVjb2RlKCkge1xuICAgIHZhciBtYXNrID0gLSh0aGlzLmxvICYgMSk7XG4gICAgdGhpcy5sbyAgPSAoKHRoaXMubG8gPj4+IDEgfCB0aGlzLmhpIDw8IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMuaGkgID0gKCB0aGlzLmhpID4+PiAxICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgbG9uZ2JpdHMgd2hlbiBlbmNvZGVkIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge251bWJlcn0gTGVuZ3RoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoKSB7XG4gICAgdmFyIHBhcnQwID0gIHRoaXMubG8sXG4gICAgICAgIHBhcnQxID0gKHRoaXMubG8gPj4+IDI4IHwgdGhpcy5oaSA8PCA0KSA+Pj4gMCxcbiAgICAgICAgcGFydDIgPSAgdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHBhcnQyID09PSAwXG4gICAgICAgICA/IHBhcnQxID09PSAwXG4gICAgICAgICAgID8gcGFydDAgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDAgPCAxMjggPyAxIDogMlxuICAgICAgICAgICAgIDogcGFydDAgPCAyMDk3MTUyID8gMyA6IDRcbiAgICAgICAgICAgOiBwYXJ0MSA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MSA8IDEyOCA/IDUgOiA2XG4gICAgICAgICAgICAgOiBwYXJ0MSA8IDIwOTcxNTIgPyA3IDogOFxuICAgICAgICAgOiBwYXJ0MiA8IDEyOCA/IDkgOiAxMDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB1dGlsID0gZXhwb3J0cztcblxuLy8gdXNlZCB0byByZXR1cm4gYSBQcm9taXNlIHdoZXJlIGNhbGxiYWNrIGlzIG9taXR0ZWRcbnV0aWwuYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwuYmFzZTY0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Jhc2U2NFwiKTtcblxuLy8gYmFzZSBjbGFzcyBvZiBycGMuU2VydmljZVxudXRpbC5FdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZXZlbnRlbWl0dGVyXCIpO1xuXG4vLyBmbG9hdCBoYW5kbGluZyBhY2Nyb3NzIGJyb3dzZXJzXG51dGlsLmZsb2F0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Zsb2F0XCIpO1xuXG4vLyByZXF1aXJlcyBtb2R1bGVzIG9wdGlvbmFsbHkgYW5kIGhpZGVzIHRoZSBjYWxsIGZyb20gYnVuZGxlcnNcbnV0aWwuaW5xdWlyZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gdXRmOCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwudXRmOCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy91dGY4XCIpO1xuXG4vLyBwcm92aWRlcyBhIG5vZGUtbGlrZSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlclxudXRpbC5wb29sID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3Bvb2xcIik7XG5cbi8vIHV0aWxpdHkgdG8gd29yayB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZVxudXRpbC5Mb25nQml0cyA9IHJlcXVpcmUoXCIuL2xvbmdiaXRzXCIpO1xuXG4vKipcbiAqIFdoZXRoZXIgcnVubmluZyB3aXRoaW4gbm9kZSBvciBub3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbnV0aWwuaXNOb2RlID0gQm9vbGVhbih0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKipcbiAqIEdsb2JhbCBvYmplY3QgcmVmZXJlbmNlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnV0aWwuZ2xvYmFsID0gdXRpbC5pc05vZGUgJiYgZ2xvYmFsXG4gICAgICAgICAgIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG4gICAgICAgICAgIHx8IHR5cGVvZiBzZWxmICAgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuICAgICAgICAgICB8fCB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG4vKipcbiAqIEFuIGltbXVhYmxlIGVtcHR5IGFycmF5LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtBcnJheS48Kj59XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoW10pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBlbXB0eSBvYmplY3QuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xudXRpbC5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xudXRpbC5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqL1xudXRpbC5pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIHV0aWwuaXNTZXR9LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc3NldCA9XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzU2V0ID0gZnVuY3Rpb24gaXNTZXQob2JqLCBwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW3Byb3BdO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpID4gMDtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBCdWZmZXIgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IG5vZGUncyB0eXBpbmdzLlxuICogQGludGVyZmFjZSBCdWZmZXJcbiAqIEBleHRlbmRzIFVpbnQ4QXJyYXlcbiAqL1xuXG4vKipcbiAqIE5vZGUncyBCdWZmZXIgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPEJ1ZmZlcj59XG4gKi9cbnV0aWwuQnVmZmVyID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBCdWZmZXIgPSB1dGlsLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuICAgICAgICAvLyByZWZ1c2UgdG8gdXNlIG5vbi1ub2RlIGJ1ZmZlcnMgaWYgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQgKHBlcmYgcmVhc29ucyk6XG4gICAgICAgIHJldHVybiBCdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA/IEJ1ZmZlciA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59KSgpO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZnVsbCBmb3IgQnVmZmVyLmZyb20uXG51dGlsLl9CdWZmZXJfZnJvbSA9IG51bGw7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmaWxsIGZvciBCdWZmZXIuYWxsb2NVbnNhZmUuXG51dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIG9mIHdoYXRldmVyIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbc2l6ZU9yQXJyYXk9MF0gQnVmZmVyIHNpemUgb3IgbnVtYmVyIGFycmF5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheXxCdWZmZXJ9IEJ1ZmZlclxuICovXG51dGlsLm5ld0J1ZmZlciA9IGZ1bmN0aW9uIG5ld0J1ZmZlcihzaXplT3JBcnJheSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiBzaXplT3JBcnJheSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogbmV3IHV0aWwuQXJyYXkoc2l6ZU9yQXJyYXkpXG4gICAgICAgIDogdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2Zyb20oc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IHR5cGVvZiBVaW50OEFycmF5ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBzaXplT3JBcnJheVxuICAgICAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoc2l6ZU9yQXJyYXkpO1xufTtcblxuLyoqXG4gKiBBcnJheSBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIHRoZSBicm93c2VyLiBgVWludDhBcnJheWAgaWYgc3VwcG9ydGVkLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxVaW50OEFycmF5Pn1cbiAqL1xudXRpbC5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gVWludDhBcnJheSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA6IEFycmF5O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIExvbmcgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgTG9uZyBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbG9uZy5qcy5cbiAqIEBpbnRlcmZhY2UgTG9uZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvdyBMb3cgYml0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGhpZ2ggSGlnaCBiaXRzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBMb25nLmpzJ3MgTG9uZyBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8TG9uZz59XG4gKi9cbnV0aWwuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTy5Mb25nXG4gICAgICAgICB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5Mb25nXG4gICAgICAgICB8fCB1dGlsLmlucXVpcmUoXCJsb25nXCIpO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAyIGJpdCAoYGJvb2xgKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDMyIGJpdCAoYGludDMyYCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkzMlJlID0gL14tPyg/OjB8WzEtOV1bMC05XSopJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDY0IGJpdCAoYGludDY0YCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXk2NFJlID0gL14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIG9yIGxvbmcgdG8gYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbnV0aWwubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uIGxvbmdUb0hhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB1dGlsLkxvbmdCaXRzLmZyb20odmFsdWUpLnRvSGFzaCgpXG4gICAgICAgIDogdXRpbC5Mb25nQml0cy56ZXJvSGFzaDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcgdG8gYSBsb25nIG9yIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd8bnVtYmVyfSBPcmlnaW5hbCB2YWx1ZVxuICovXG51dGlsLmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uIGxvbmdGcm9tSGFzaChoYXNoLCB1bnNpZ25lZCkge1xuICAgIHZhciBiaXRzID0gdXRpbC5Mb25nQml0cy5mcm9tSGFzaChoYXNoKTtcbiAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICByZXR1cm4gdXRpbC5Mb25nLmZyb21CaXRzKGJpdHMubG8sIGJpdHMuaGksIHVuc2lnbmVkKTtcbiAgICByZXR1cm4gYml0cy50b051bWJlcihCb29sZWFuKHVuc2lnbmVkKSk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc291cmNlIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gc3JjIFNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lmTm90U2V0PWZhbHNlXSBNZXJnZXMgb25seSBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHNldFxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXN0aW5hdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIGlmTm90U2V0KSB7IC8vIHVzZWQgYnkgY29udmVydGVyc1xuICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChkc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCB8fCAhaWZOb3RTZXQpXG4gICAgICAgICAgICBkc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgcmV0dXJuIGRzdDtcbn1cblxudXRpbC5tZXJnZSA9IG1lcmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC5sY0ZpcnN0ID0gZnVuY3Rpb24gbGNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBlcnJvciBjb25zdHJ1Y3Rvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFcnJvciBuYW1lXG4gKiBAcmV0dXJucyB7Q29uc3RydWN0b3I8RXJyb3I+fSBDdXN0b20gZXJyb3IgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gbmV3RXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcykge1xuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdXN0b21FcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgIC8vIF4ganVzdCByZXR1cm5zIGEgbmV3IGVycm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIGN0b3IgY2FuIGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWVzc2FnZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtZXNzYWdlOyB9IH0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgLy8gbm9kZVxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3VzdG9tRXJyb3IpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFja1wiLCB7IHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayB8fCBcIlwiIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgKEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21FcnJvci5wcm90b3R5cGUsIFwibmFtZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBuYW1lOyB9IH0pO1xuXG4gICAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxudXRpbC5uZXdFcnJvciA9IG5ld0Vycm9yO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcHJvdG9jb2wgZXJyb3IuXG4gKiBAY2xhc3NkZXNjIEVycm9yIHN1YmNsYXNzIGluZGljYXRpbmcgYSBwcm90b2NvbCBzcGVjaWZjIGVycm9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBleHRlbmRzIEVycm9yXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIEFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgICAgTXlNZXNzYWdlLmRlY29kZShzb21lQnVmZmVyKTsgLy8gdGhyb3dzIGlmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICogfSBjYXRjaCAoZSkge1xuICogICAgIGlmIChlIGluc3RhbmNlb2YgUHJvdG9jb2xFcnJvciAmJiBlLmluc3RhbmNlKVxuICogICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgc28gZmFyOiBcIiArIEpTT04uc3RyaW5naWZ5KGUuaW5zdGFuY2UpKTtcbiAqIH1cbiAqL1xudXRpbC5Qcm90b2NvbEVycm9yID0gbmV3RXJyb3IoXCJQcm90b2NvbEVycm9yXCIpO1xuXG4vKipcbiAqIFNvIGZhciBkZWNvZGVkIG1lc3NhZ2UgaW5zdGFuY2UuXG4gKiBAbmFtZSB1dGlsLlByb3RvY29sRXJyb3IjaW5zdGFuY2VcbiAqIEB0eXBlIHtNZXNzYWdlPFQ+fVxuICovXG5cbi8qKlxuICogQSBPbmVPZiBnZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZHZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZHZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBnZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZHZXR0ZXJ9IFVuYm91bmQgZ2V0dGVyXG4gKi9cbnV0aWwub25lT2ZHZXR0ZXIgPSBmdW5jdGlvbiBnZXRPbmVPZihmaWVsZE5hbWVzKSB7XG4gICAgdmFyIGZpZWxkTWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICBmaWVsZE1hcFtmaWVsZE5hbWVzW2ldXSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID4gLTE7IC0taSlcbiAgICAgICAgICAgIGlmIChmaWVsZE1hcFtrZXlzW2ldXSA9PT0gMSAmJiB0aGlzW2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgdGhpc1trZXlzW2ldXSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5c1tpXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBIE9uZU9mIHNldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZlNldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZlNldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBGaWVsZCBuYW1lXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgc2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mU2V0dGVyfSBVbmJvdW5kIHNldHRlclxuICovXG51dGlsLm9uZU9mU2V0dGVyID0gZnVuY3Rpb24gc2V0T25lT2YoZmllbGROYW1lcykge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVzW2ldICE9PSBuYW1lKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ZpZWxkTmFtZXNbaV1dO1xuICAgIH07XG59O1xuXG4vKipcbiAqIERlZmF1bHQgY29udmVyc2lvbiBvcHRpb25zIHVzZWQgZm9yIHtAbGluayBNZXNzYWdlI3RvSlNPTn0gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoZXNlIG9wdGlvbnMgYXJlIGNsb3NlIHRvIHByb3RvMydzIEpTT04gbWFwcGluZyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBpbnRlcm5hbCB0eXBlcyBsaWtlIEFueSBhcmUgaGFuZGxlZCBqdXN0IGxpa2UgbWVzc2FnZXMuIE1vcmUgcHJlY2lzZWx5OlxuICpcbiAqIC0gTG9uZ3MgYmVjb21lIHN0cmluZ3NcbiAqIC0gRW51bXMgYmVjb21lIHN0cmluZyBrZXlzXG4gKiAtIEJ5dGVzIGJlY29tZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKiAtIChTdWItKU1lc3NhZ2VzIGJlY29tZSBwbGFpbiBvYmplY3RzXG4gKiAtIE1hcHMgYmVjb21lIHBsYWluIG9iamVjdHMgd2l0aCBhbGwgc3RyaW5nIGtleXNcbiAqIC0gUmVwZWF0ZWQgZmllbGRzIGJlY29tZSBhcnJheXNcbiAqIC0gTmFOIGFuZCBJbmZpbml0eSBmb3IgZmxvYXQgYW5kIGRvdWJsZSBmaWVsZHMgYmVjb21lIHN0cmluZ3NcbiAqXG4gKiBAdHlwZSB7SUNvbnZlcnNpb25PcHRpb25zfVxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zP2hsPWVuI2pzb25cbiAqL1xudXRpbC50b0pTT05PcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGpzb246IHRydWVcbn07XG5cbi8vIFNldHMgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCAoY2FsbGVkIGluIGluZGV4LW1pbmltYWwpXG51dGlsLl9jb25maWd1cmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFCdWZmZXIpIHtcbiAgICAgICAgdXRpbC5fQnVmZmVyX2Zyb20gPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJlY2F1c2Ugbm9kZSA0LnggYnVmZmVycyBhcmUgaW5jb21wYXRpYmxlICYgaW1tdXRhYmxlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9wcm90b2J1Zi5qcy9wdWxsLzY2NVxuICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gQnVmZmVyLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBCdWZmZXIuZnJvbSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfZnJvbSh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgICAgIH07XG4gICAgdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gQnVmZmVyLmFsbG9jVW5zYWZlIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9hbGxvY1Vuc2FmZShzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICAgICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcldyaXRlcjtcblxuLy8gZXh0ZW5kcyBXcml0ZXJcbnZhciBXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG4oQnVmZmVyV3JpdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyV3JpdGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBCdWZmZXJXcml0ZXIoKSB7XG4gICAgV3JpdGVyLmNhbGwodGhpcyk7XG59XG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBCdWZmZXJcbiAgICAgKi9cbiAgICBCdWZmZXJXcml0ZXIuYWxsb2MgPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmU7XG5cbiAgICBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwuQnVmZmVyICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiXG4gICAgICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBmYXN0ZXIgdGhhbiBjb3B5IChyZXF1aXJlcyBub2RlID49IDQgd2hlcmUgQnVmZmVycyBleHRlbmQgVWludDhBcnJheSBhbmQgc2V0IGlzIHByb3Blcmx5IGluaGVyaXRlZClcbiAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfY29weSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgaWYgKHZhbC5jb3B5KSAvLyBCdWZmZXIgdmFsdWVzXG4gICAgICAgICAgICB2YWwuY29weShidWYsIHBvcywgMCwgdmFsLmxlbmd0aCk7XG4gICAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7KSAvLyBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSB2YWxbaSsrXTtcbiAgICAgICAgfTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzX2J1ZmZlcih2YWx1ZSkge1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgdmFsdWUgPSB1dGlsLl9CdWZmZXJfZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIik7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2goQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVTdHJpbmdCdWZmZXIodmFsLCBidWYsIHBvcykge1xuICAgIGlmICh2YWwubGVuZ3RoIDwgNDApIC8vIHBsYWluIGpzIGlzIGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAocHJvYmFibHkgZHVlIHRvIHJlZHVuZGFudCBhc3NlcnRpb25zKVxuICAgICAgICB1dGlsLnV0Zjgud3JpdGUodmFsLCBidWYsIHBvcyk7XG4gICAgZWxzZSBpZiAoYnVmLnV0ZjhXcml0ZSlcbiAgICAgICAgYnVmLnV0ZjhXcml0ZSh2YWwsIHBvcyk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGUodmFsLCBwb3MpO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZ19idWZmZXIodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRpbC5CdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQG5hbWUgQnVmZmVyV3JpdGVyI2ZpbmlzaFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlclJlYWRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShyZWFkZXIsIHdyaXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiICsgcmVhZGVyLnBvcyArIFwiICsgXCIgKyAod3JpdGVMZW5ndGggfHwgMSkgKyBcIiA+IFwiICsgcmVhZGVyLmxlbik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWFkZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBSZWFkZXIoYnVmZmVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAdHlwZSB7VWludDhBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZiA9IGJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIHBvc2l0aW9uLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBidWZmZXIubGVuZ3RoO1xufVxuXG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IGZ1bmN0aW9uIGNyZWF0ZV90eXBlZF9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfTtcblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFkZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCdWZmZXJSZWFkZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZV9hcnJheShidWZmZXIpO1xuICAgICAgICAgICAgfSkoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGNyZWF0ZV9hcnJheTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7VWludDhBcnJheXxCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKiBAcmV0dXJucyB7UmVhZGVyfEJ1ZmZlclJlYWRlcn0gQSB7QGxpbmsgQnVmZmVyUmVhZGVyfSBpZiBgYnVmZmVyYCBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGEge0BsaW5rIFJlYWRlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgYnVmZmVyYCBpcyBub3QgYSB2YWxpZCBidWZmZXJcbiAqL1xuUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG5SZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnVpbnQzMiA9IChmdW5jdGlvbiByZWFkX3VpbnQzMl9zZXR1cCgpIHtcbiAgICB2YXIgdmFsdWUgPSA0Mjk0OTY3Mjk1OyAvLyBvcHRpbWl6ZXIgdHlwZS1oaW50LCB0ZW5kcyB0byBkZW9wdCBvdGhlcndpc2UgKD8hKVxuICAgIHJldHVybiBmdW5jdGlvbiByZWFkX3VpbnQzMigpIHtcbiAgICAgICAgdmFsdWUgPSAoICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3NdICYgMTI3ICAgICAgICkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8ICA3KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyMSkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAgMTUpIDw8IDI4KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodGhpcy5wb3MgKz0gNSkgPiB0aGlzLmxlbikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxlbjtcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHJlYWRfaW50MzIoKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ludDMyKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudWludDMyKCk7XG4gICAgcmV0dXJuIHZhbHVlID4+PiAxIF4gLSh2YWx1ZSAmIDEpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkTG9uZ1ZhcmludCgpIHtcbiAgICAvLyB0ZW5kcyB0byBkZW9wdCB3aXRoIGxvY2FsIHZhcnMgZm9yIG9jdGV0IGV0Yy5cbiAgICB2YXIgYml0cyA9IG5ldyBMb25nQml0cygwLCAwKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGxvKVxuICAgICAgICBmb3IgKDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgLy8gMXN0Li40dGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA1dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjgpID4+PiAwO1xuICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA+PiAgNCkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gMXN0Li4zdGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA0dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAoaGkpXG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciN1aW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjc2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiByZWFkX2Jvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgIT09IDA7XG59O1xuXG5mdW5jdGlvbiByZWFkRml4ZWQzMl9lbmQoYnVmLCBlbmQpIHsgLy8gbm90ZSB0aGF0IHRoaXMgdXNlcyBgZW5kYCwgbm90IGBwb3NgXG4gICAgcmV0dXJuIChidWZbZW5kIC0gNF1cbiAgICAgICAgICB8IGJ1ZltlbmQgLSAzXSA8PCA4XG4gICAgICAgICAgfCBidWZbZW5kIC0gMl0gPDwgMTZcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gcmVhZF9maXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KTtcbn07XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgvKiB0aGlzOiBSZWFkZXIgKi8pIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDgpO1xuXG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIHppZy16YWcgZW5jb2RlZCBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI3NmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIGZsb2F0ICgzMiBiaXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiByZWFkX2Zsb2F0KCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gcmVhZF9kb3VibGUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZERvdWJsZUxFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gcmVhZF9ieXRlcygpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy51aW50MzIoKSxcbiAgICAgICAgc3RhcnQgID0gdGhpcy5wb3MsXG4gICAgICAgIGVuZCAgICA9IHRoaXMucG9zICsgbGVuZ3RoO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVuZCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcblxuICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpIC8vIHBsYWluIGFycmF5XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZShzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gc3RhcnQgPT09IGVuZCAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICA/IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKVxuICAgICAgICA6IHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyUmVhZGVyO1xuXG4vLyBleHRlbmRzIFJlYWRlclxudmFyIFJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbihCdWZmZXJSZWFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWFkZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJSZWFkZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHJlYWRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFJlYWRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGJ1ZmZlcikge1xuICAgIFJlYWRlci5jYWxsKHRoaXMsIGJ1ZmZlcik7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnVmXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbn1cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodXRpbC5CdWZmZXIpXG4gICAgICAgIEJ1ZmZlclJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5CdWZmZXIucHJvdG90eXBlLnNsaWNlO1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nX2J1ZmZlcigpIHtcbiAgICB2YXIgbGVuID0gdGhpcy51aW50MzIoKTsgLy8gbW9kaWZpZXMgcG9zXG4gICAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZVxuICAgICAgICA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKVxuICAgICAgICA6IHRoaXMuYnVmLnRvU3RyaW5nKFwidXRmLThcIiwgdGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnl0ZXNcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gVmFsdWUgcmVhZFxuICovXG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vLyBFeHRlbmRzIEV2ZW50RW1pdHRlclxuKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1dGlsLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFNlcnZpY2U7XG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBycGMuU2VydmljZU1ldGhvZHxTZXJ2aWNlTWV0aG9kfS5cbiAqXG4gKiBEaWZmZXJzIGZyb20ge0BsaW5rIFJQQ0ltcGxDYWxsYmFja30gaW4gdGhhdCBpdCBpcyBhbiBhY3R1YWwgY2FsbGJhY2sgb2YgYSBzZXJ2aWNlIG1ldGhvZCB3aGljaCBtYXkgbm90IHJldHVybiBgcmVzcG9uc2UgPSBudWxsYC5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2tcbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gKiBAcGFyYW0ge1RSZXN9IFtyZXNwb25zZV0gUmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgcGFydCBvZiBhIHtAbGluayBycGMuU2VydmljZX0gYXMgY3JlYXRlZCBieSB7QGxpbmsgU2VydmljZS5jcmVhdGV9LlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RcbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IFtjYWxsYmFja10gTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIHRoZSByZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPFRSZXM+Pn0gUHJvbWlzZSBpZiBgY2FsbGJhY2tgIGhhcyBiZWVuIG9taXR0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSUEMgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQW4gUlBDIHNlcnZpY2UgYXMgcmV0dXJuZWQgYnkge0BsaW5rIFNlcnZpY2UjY3JlYXRlfS5cbiAqIEBleHBvcnRzIHJwYy5TZXJ2aWNlXG4gKiBAZXh0ZW5kcyB1dGlsLkV2ZW50RW1pdHRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1JQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuXG4gICAgaWYgKHR5cGVvZiBycGNJbXBsICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXG4gICAgdXRpbC5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFJQQyBpbXBsZW1lbnRhdGlvbi4gQmVjb21lcyBgbnVsbGAgb25jZSB0aGUgc2VydmljZSBpcyBlbmRlZC5cbiAgICAgKiBAdHlwZSB7UlBDSW1wbHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucnBjSW1wbCA9IHJwY0ltcGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdERlbGltaXRlZCA9IEJvb2xlYW4ocmVxdWVzdERlbGltaXRlZCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlRGVsaW1pdGVkID0gQm9vbGVhbihyZXNwb25zZURlbGltaXRlZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBzZXJ2aWNlIG1ldGhvZCB0aHJvdWdoIHtAbGluayBycGMuU2VydmljZSNycGNJbXBsfHJwY0ltcGx9LlxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8VFJlcSxUUmVzPn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXE+fSByZXF1ZXN0Q3RvciBSZXF1ZXN0IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXM+fSByZXNwb25zZUN0b3IgUmVzcG9uc2UgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gY2FsbGJhY2sgU2VydmljZSBjYWxsYmFja1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJwY0NhbGwgPSBmdW5jdGlvbiBycGNDYWxsKG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCwgY2FsbGJhY2spIHtcblxuICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKVxuICAgICAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UocnBjQ2FsbCwgc2VsZiwgbWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0KTtcblxuICAgIGlmICghc2VsZi5ycGNJbXBsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKEVycm9yKFwiYWxyZWFkeSBlbmRlZFwiKSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLnJwY0ltcGwoXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0Q3RvcltzZWxmLnJlcXVlc3REZWxpbWl0ZWQgPyBcImVuY29kZURlbGltaXRlZFwiIDogXCJlbmNvZGVcIl0ocmVxdWVzdCkuZmluaXNoKCksXG4gICAgICAgICAgICBmdW5jdGlvbiBycGNDYWxsYmFjayhlcnIsIHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kKC8qIGVuZGVkQnlSUEMgKi8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiByZXNwb25zZUN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlQ3RvcltzZWxmLnJlc3BvbnNlRGVsaW1pdGVkID8gXCJkZWNvZGVEZWxpbWl0ZWRcIiA6IFwiZGVjb2RlXCJdKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImRhdGFcIiwgcmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIEVuZHMgdGhpcyBzZXJ2aWNlIGFuZCBlbWl0cyB0aGUgYGVuZGAgZXZlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmRlZEJ5UlBDPWZhbHNlXSBXaGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGVuZGVkIGJ5IHRoZSBSUEMgaW1wbGVtZW50YXRpb24uXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IGB0aGlzYFxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZW5kZWRCeVJQQykge1xuICAgIGlmICh0aGlzLnJwY0ltcGwpIHtcbiAgICAgICAgaWYgKCFlbmRlZEJ5UlBDKSAvLyBzaWduYWwgZW5kIHRvIHJwY0ltcGxcbiAgICAgICAgICAgIHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgdGhpcy5ycGNJbXBsID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogTmFtZWQgcm9vdHMuXG4gKiBUaGlzIGlzIHdoZXJlIHBianMgc3RvcmVzIGdlbmVyYXRlZCBzdHJ1Y3R1cmVzICh0aGUgb3B0aW9uIGAtciwgLS1yb290YCBzcGVjaWZpZXMgYSBuYW1lKS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgbWFudWFsbHkgdG8gbWFrZSByb290cyBhdmFpbGFibGUgYWNjcm9zcyBtb2R1bGVzLlxuICogQG5hbWUgcm9vdHNcbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSb290Pn1cbiAqIEBleGFtcGxlXG4gKiAvLyBwYmpzIC1yIG15cm9vdCAtbyBjb21waWxlZC5qcyAuLi5cbiAqXG4gKiAvLyBpbiBhbm90aGVyIG1vZHVsZTpcbiAqIHJlcXVpcmUoXCIuL2NvbXBpbGVkLmpzXCIpO1xuICpcbiAqIC8vIGluIGFueSBzdWJzZXF1ZW50IG1vZHVsZTpcbiAqIHZhciByb290ID0gcHJvdG9idWYucm9vdHNbXCJteXJvb3RcIl07XG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLCIvLyBtaW5pbWFsIGxpYnJhcnkgZW50cnkgcG9pbnQuXG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9zcmMvaW5kZXgtbWluaW1hbFwiKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdG9yIHtcbiAgc3RhdGVzOiBQQkFuaW1hdGlvblN0YXRlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdGlvblN0YXRlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGNsaXA6IHN0cmluZ1xuICBwbGF5aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBzICovXG4gIHdlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgc3BlZWQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaG91bGRSZXNldD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKTogUEJBbmltYXRvciB7XG4gIHJldHVybiB7IHN0YXRlczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdG9yID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRvciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnN0YXRlcykge1xuICAgICAgUEJBbmltYXRpb25TdGF0ZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQW5pbWF0b3Ige1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlcy5wdXNoKFBCQW5pbWF0aW9uU3RhdGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0aW9uU3RhdGUoKTogUEJBbmltYXRpb25TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJycsXG4gICAgY2xpcDogJycsXG4gICAgcGxheWluZzogdW5kZWZpbmVkLFxuICAgIHdlaWdodDogdW5kZWZpbmVkLFxuICAgIHNwZWVkOiB1bmRlZmluZWQsXG4gICAgbG9vcDogdW5kZWZpbmVkLFxuICAgIHNob3VsZFJlc2V0OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdGlvblN0YXRlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRpb25TdGF0ZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGlwICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuY2xpcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxheWluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UucGxheWluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2VpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uud2VpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGVlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLnNwZWVkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5ib29sKG1lc3NhZ2Uuc2hvdWxkUmVzZXQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkFuaW1hdGlvblN0YXRlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkFuaW1hdGlvblN0YXRlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuY2xpcCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uud2VpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5zcGVlZCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5zaG91bGRSZXNldCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBbmltYXRvciB9IGZyb20gJy4vcGIvQW5pbWF0b3IuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3JTY2hlbWE6IElTY2hlbWE8UEJBbmltYXRvcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBbmltYXRvciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQW5pbWF0b3IuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQW5pbWF0b3Ige1xuICAgIHJldHVybiBQQkFuaW1hdG9yLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBbmltYXRvciB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQW5pbWF0b3IuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF1ZGlvU291cmNlIHtcbiAgcGxheWluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICB2b2x1bWU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbG9vcD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBwaXRjaD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBhdWRpb0NsaXBVcmw6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgcmV0dXJuIHsgcGxheWluZzogdW5kZWZpbmVkLCB2b2x1bWU6IHVuZGVmaW5lZCwgbG9vcDogdW5kZWZpbmVkLCBwaXRjaDogdW5kZWZpbmVkLCBhdWRpb0NsaXBVcmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1NvdXJjZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9Tb3VyY2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnZvbHVtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubG9vcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGl0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5waXRjaClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXVkaW9DbGlwVXJsICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXVkaW9DbGlwVXJsKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucGxheWluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52b2x1bWUgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmxvb3AgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucGl0Y2ggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmF1ZGlvQ2xpcFVybCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU291cmNlIH0gZnJvbSAnLi9wYi9BdWRpb1NvdXJjZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZVNjaGVtYTogSVNjaGVtYTxQQkF1ZGlvU291cmNlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU291cmNlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1NvdXJjZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJBbmNob3JQb2ludCB7XG4gIFBPU0lUSU9OID0gMCxcbiAgTkFNRV9UQUcgPSAxLFxuICBMRUZUX0hBTkQgPSAyLFxuICBSSUdIVF9IQU5EID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhckF0dGFjaCB7XG4gIGF2YXRhcklkOiBzdHJpbmdcbiAgYW5jaG9yUG9pbnRJZDogQXZhdGFyQW5jaG9yUG9pbnRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyQXR0YWNoKCk6IFBCQXZhdGFyQXR0YWNoIHtcbiAgcmV0dXJuIHsgYXZhdGFySWQ6ICcnLCBhbmNob3JQb2ludElkOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJBdHRhY2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF2YXRhckF0dGFjaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmF2YXRhcklkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuYXZhdGFySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFuY2hvclBvaW50SWQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYW5jaG9yUG9pbnRJZClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhckF0dGFjaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXZhdGFySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbmNob3JQb2ludElkID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyQXR0YWNoIH0gZnJvbSAnLi9wYi9BdmF0YXJBdHRhY2guZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyQXR0YWNoPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhckF0dGFjaCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyQXR0YWNoLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgcmV0dXJuIFBCQXZhdGFyQXR0YWNoLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhckF0dGFjaC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvcjMge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHo6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVmVjdG9yMygpOiBWZWN0b3IzIHtcbiAgcmV0dXJuIHsgeDogMCwgeTogMCwgejogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZlY3RvcjMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBWZWN0b3IzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnogIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UueilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFZlY3RvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVZlY3RvcjMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnogPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJNb2RpZmllciB7XG4gIEhJREVfQVZBVEFSUyA9IDAsXG4gIERJU0FCTEVfUEFTU1BPUlRTID0gMSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZXhjbHVkZUlkczogc3RyaW5nW11cbiAgbW9kaWZpZXJzOiBBdmF0YXJNb2RpZmllcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF2YXRhck1vZGlmaWVyQXJlYSgpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIHJldHVybiB7IGFyZWE6IHVuZGVmaW5lZCwgZXhjbHVkZUlkczogW10sIG1vZGlmaWVyczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhck1vZGlmaWVyQXJlYSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyTW9kaWZpZXJBcmVhLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXJlYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmFyZWEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXhjbHVkZUlkcykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKHYhKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDI2KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5tb2RpZmllcnMpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyTW9kaWZpZXJBcmVhKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hcmVhID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZXhjbHVkZUlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLm1vZGlmaWVycy5wdXNoKHJlYWRlci5pbnQzMigpIGFzIGFueSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS5tb2RpZmllcnMucHVzaChyZWFkZXIuaW50MzIoKSBhcyBhbnkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhck1vZGlmaWVyQXJlYSB9IGZyb20gJy4vcGIvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYTogSVNjaGVtYTxQQkF2YXRhck1vZGlmaWVyQXJlYT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJNb2RpZmllckFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhck1vZGlmaWVyQXJlYS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIHJldHVybiBQQkF2YXRhck1vZGlmaWVyQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJNb2RpZmllckFyZWEuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gTG9uZztcclxuXHJcbi8qKlxyXG4gKiB3YXNtIG9wdGltaXphdGlvbnMsIHRvIGRvIG5hdGl2ZSBpNjQgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlkZVxyXG4gKi9cclxudmFyIHdhc20gPSBudWxsO1xyXG5cclxudHJ5IHtcclxuICB3YXNtID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUobmV3IFVpbnQ4QXJyYXkoW1xyXG4gICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCAxMywgMiwgOTYsIDAsIDEsIDEyNywgOTYsIDQsIDEyNywgMTI3LCAxMjcsIDEyNywgMSwgMTI3LCAzLCA3LCA2LCAwLCAxLCAxLCAxLCAxLCAxLCA2LCA2LCAxLCAxMjcsIDEsIDY1LCAwLCAxMSwgNywgNTAsIDYsIDMsIDEwOSwgMTE3LCAxMDgsIDAsIDEsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTUsIDAsIDIsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTcsIDAsIDMsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTUsIDAsIDQsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTcsIDAsIDUsIDgsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDQsIDEwNSwgMTAzLCAxMDQsIDAsIDAsIDEwLCAxOTEsIDEsIDYsIDQsIDAsIDM1LCAwLCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI2LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjcsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOCwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI5LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMzAsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTFcclxuICBdKSksIHt9KS5leHBvcnRzO1xyXG59IGNhdGNoIChlKSB7XHJcbiAgLy8gbm8gd2FzbSBzdXBwb3J0IDooXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciwgZ2l2ZW4gaXRzIGxvdyBhbmQgaGlnaCAzMiBiaXQgdmFsdWVzIGFzICpzaWduZWQqIGludGVnZXJzLlxyXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBMb25ncy5cclxuICogQGV4cG9ydHMgTG9uZ1xyXG4gKiBAY2xhc3MgQSBMb25nIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBMb25nKGxvdywgaGlnaCwgdW5zaWduZWQpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb3cgMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubG93ID0gbG93IHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhpZ2ggPSBoaWdoIHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkO1xyXG59XHJcblxyXG4vLyBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBsb25nIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxyXG4vLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxyXG4vLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcclxuLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxyXG4vLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xyXG4vLyBvciBjaGFuZ2UgaW4gc2lnbi5cclxuLy9cclxuLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxyXG4vLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cclxuLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXHJcbi8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcclxuLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xyXG4vLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXHJcbi8vXHJcbi8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxyXG4vLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxyXG5cclxuLyoqXHJcbiAqIEFuIGluZGljYXRvciB1c2VkIHRvIHJlbGlhYmx5IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBMb25nIG9yIG5vdC5cclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBjb25zdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuTG9uZy5wcm90b3R5cGUuX19pc0xvbmdfXztcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nLnByb3RvdHlwZSwgXCJfX2lzTG9uZ19fXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0xvbmcob2JqKSB7XHJcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzTG9uZ19fXCJdKSA9PT0gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgTG9uZy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmcuaXNMb25nID0gaXNMb25nO1xyXG5cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIExvbmcgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxyXG4gKiBAdHlwZSB7IU9iamVjdH1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQSBjYWNoZSBvZiB0aGUgTG9uZyByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuXHJcbiAqIEB0eXBlIHshT2JqZWN0fVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tSW50KHZhbHVlLCB1bnNpZ25lZCkge1xyXG4gICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTtcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIHZhbHVlID4+Pj0gMDtcclxuICAgICAgICBpZiAoY2FjaGUgPSAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikpIHtcclxuICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgKHZhbHVlIHwgMCkgPCAwID8gLTEgOiAwLCB0cnVlKTtcclxuICAgICAgICBpZiAoY2FjaGUpXHJcbiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlIHw9IDA7XHJcbiAgICAgICAgaWYgKGNhY2hlID0gKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKVxyXG4gICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSAzMiBiaXQgaW50ZWdlciBpbiBxdWVzdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tSW50ID0gZnJvbUludDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgICAgIHJldHVybiBVWkVSTztcclxuICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICAgICAgaWYgKHZhbHVlICsgMSA+PSBUV09fUFdSXzYzX0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1BWF9WQUxVRTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwpIHwgMCwgKHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCwgdW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgbnVtYmVyIGluIHF1ZXN0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbUJpdHMobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xyXG4gKiAgYXNzdW1lZCB0byB1c2UgMzIgYml0cy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHMgVGhlIGhpZ2ggMzIgYml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQml0cyA9IGZyb21CaXRzO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gYmFzZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZXhwb25lbnRcclxuICogQHJldHVybnMge251bWJlcn1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgcG93X2RibCA9IE1hdGgucG93OyAvLyBVc2VkIDQgdGltZXMgKDQqOCB0byAxNSs0KVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcclxuICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkge1xyXG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2VtcHR5IHN0cmluZycpO1xyXG4gICAgaWYgKHN0ciA9PT0gXCJOYU5cIiB8fCBzdHIgPT09IFwiSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiK0luZmluaXR5XCIgfHwgc3RyID09PSBcIi1JbmZpbml0eVwiKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKHR5cGVvZiB1bnNpZ25lZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAvLyBGb3IgZ29vZy5tYXRoLmxvbmcgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgIHJhZGl4ID0gdW5zaWduZWQsXHJcbiAgICAgICAgdW5zaWduZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5zaWduZWQgPSAhISB1bnNpZ25lZDtcclxuICAgIH1cclxuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XHJcbiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpXHJcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXgnKTtcclxuXHJcbiAgICB2YXIgcDtcclxuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcclxuICAgICAgICB0aHJvdyBFcnJvcignaW50ZXJpb3IgaHlwaGVuJyk7XHJcbiAgICBlbHNlIGlmIChwID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gWkVSTztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksXHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcclxuICAgICAgICBpZiAoc2l6ZSA8IDgpIHtcclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCBzaXplKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocG93ZXIpLmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQudW5zaWduZWQgPSB1bnNpZ25lZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nXHJcbiAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBUaGUgcmFkaXggaW4gd2hpY2ggdGhlIHRleHQgaXMgd3JpdHRlbiAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tU3RyaW5nID0gZnJvbVN0cmluZztcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlciwgdW5zaWduZWQ6IGJvb2xlYW59fSB2YWxcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7XHJcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBMb25nOlxyXG4gICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICdib29sZWFuJyA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBMb25nIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmcm9tKiBmdW5jdGlvbiBmb3IgaXRzIHR5cGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbCBWYWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmcuZnJvbVZhbHVlID0gZnJvbVZhbHVlO1xyXG5cclxuLy8gTk9URTogdGhlIGNvbXBpbGVyIHNob3VsZCBpbmxpbmUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJlbG93IGFuZCB0aGVuIHJlbW92ZSB0aGVzZSB2YXJpYWJsZXMsIHNvIHRoZXJlIHNob3VsZCBiZVxyXG4vLyBubyBydW50aW1lIHBlbmFsdHkgZm9yIHRoZXNlLlxyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8zMl9EQkwgPSBUV09fUFdSXzE2X0RCTCAqIFRXT19QV1JfMTZfREJMO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFpFUk8gPSBmcm9tSW50KDApO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCB6ZXJvLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlpFUk8gPSBaRVJPO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFVuc2lnbmVkIHplcm8uXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVVpFUk8gPSBVWkVSTztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE9ORSA9IGZyb21JbnQoMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5PTkUgPSBPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVT05FID0gZnJvbUludCgxLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBVbnNpZ25lZCBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVU9ORSA9IFVPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBORUdfT05FID0gZnJvbUludCgtMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5ORUdfT05FID0gTkVHX09ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDB4RkZGRkZGRkZ8MCwgMHg3RkZGRkZGRnwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoMHhGRkZGRkZGRnwwLCAweEZGRkZGRkZGfDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIE1heGltdW0gdW5zaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWluaW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBMb25nLnByb3RvdHlwZVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBMb25nUHJvdG90eXBlID0gTG9uZy5wcm90b3R5cGU7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSAzMiBiaXQgaW50ZWdlciwgYXNzdW1pbmcgaXQgaXMgYSAzMiBiaXQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiB0b0ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHRoZSBuZWFyZXN0IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWUgKGRvdWJsZSwgNTMgYml0IG1hbnRpc3NhKS5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlcigpIHtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiAoKHRoaXMuaGlnaCA+Pj4gMCkgKiBUV09fUFdSXzMyX0RCTCkgKyAodGhpcy5sb3cgPj4+IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHN0cmluZyB3cml0dGVuIGluIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggUmFkaXggKDItMzYpLCBkZWZhdWx0cyB0byAxMFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAb3ZlcnJpZGVcclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYHJhZGl4YCBpcyBvdXQgb2YgcmFuZ2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkge1xyXG4gICAgcmFkaXggPSByYWRpeCB8fCAxMDtcclxuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcclxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCcpO1xyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgeyAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBMb25nIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXHJcbiAgICAgICAgICAgIC8vIHRoZSBib3R0b20tbW9zdCBkaWdpdCBpbiB0aGlzIGJhc2UgYW5kIHRoZW4gcmVjdXJzZSB0byBkbyB0aGUgcmVzdC5cclxuICAgICAgICAgICAgdmFyIHJhZGl4TG9uZyA9IGZyb21OdW1iZXIocmFkaXgpLFxyXG4gICAgICAgICAgICAgICAgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSxcclxuICAgICAgICAgICAgICAgIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZygpLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSxcclxuICAgICAgICByZW0gPSB0aGlzO1xyXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLFxyXG4gICAgICAgICAgICBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCxcclxuICAgICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgICAgICByZW0gPSByZW1EaXY7XHJcbiAgICAgICAgaWYgKHJlbS5pc1plcm8oKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gJzAnICsgZGlnaXRzO1xyXG4gICAgICAgICAgICByZXN1bHQgPSAnJyArIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2g7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGhpZ2ggYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxvdyA+Pj4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5lcShNSU5fVkFMVUUpID8gNjQgOiB0aGlzLm5lZygpLmdldE51bUJpdHNBYnMoKTtcclxuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xyXG4gICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKVxyXG4gICAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoICE9IDAgPyBiaXQgKyAzMyA6IGJpdCArIDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB6ZXJvLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2lzWmVyb30uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBuZWdhdGl2ZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgcG9zaXRpdmUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIG9kZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZXZlbi5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHtcclxuICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgKHRoaXMuaGlnaCA+Pj4gMzEpID09PSAxICYmIChvdGhlci5oaWdoID4+PiAzMSkgPT09IDEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxID0gTG9uZ1Byb3RvdHlwZS5lcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90RXF1YWxzID0gZnVuY3Rpb24gbm90RXF1YWxzKG90aGVyKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuZXEoLyogdmFsaWRhdGVzICovIG90aGVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZXEgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlc3NUaGFuID0gZnVuY3Rpb24gbGVzc1RoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcclxuICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIGlmICh0aGlzLmVxKG90aGVyKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXHJcbiAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XHJcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YihvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xyXG4gICAgLy8gQm90aCBhcmUgcG9zaXRpdmUgaWYgYXQgbGVhc3Qgb25lIGlzIHVuc2lnbmVkXHJcbiAgICByZXR1cm4gKG90aGVyLmhpZ2ggPj4+IDApID4gKHRoaXMuaGlnaCA+Pj4gMCkgfHwgKG90aGVyLmhpZ2ggPT09IHRoaXMuaGlnaCAmJiAob3RoZXIubG93ID4+PiAwKSA+ICh0aGlzLmxvdyA+Pj4gMCkpID8gLTEgOiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2NvbXBhcmV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXHJcbiAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQgJiYgdGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICByZXR1cm4gdGhpcy5ub3QoKS5hZGQoT05FKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25lZ2F0ZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWcgPSBMb25nUHJvdG90eXBlLm5lZ2F0ZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBTdW1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkge1xyXG4gICAgaWYgKCFpc0xvbmcoYWRkZW5kKSlcclxuICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cclxuXHJcbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcclxuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBiNDggPSBhZGRlbmQuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcclxuICAgIGMwMCArPSBhMDAgKyBiMDA7XHJcbiAgICBjMTYgKz0gYzAwID4+PiAxNjtcclxuICAgIGMwMCAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTE2ICsgYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiArIGIzMjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGM0OCArPSBhNDggKyBiNDg7XHJcbiAgICBjNDggJj0gMHhGRkZGO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKChjMTYgPDwgMTYpIHwgYzAwLCAoYzQ4IDw8IDE2KSB8IGMzMiwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcclxuICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKVxyXG4gICAgICAgIHN1YnRyYWhlbmQgPSBmcm9tVmFsdWUoc3VidHJhaGVuZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc3VidHJhY3R9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBEaWZmZXJlbmNlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnN1YiA9IExvbmdQcm90b3R5cGUuc3VidHJhY3Q7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUHJvZHVjdFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpXHJcbiAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLmhpZ2gpO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPO1xyXG4gICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcclxuXHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTtcclxuICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpO1xyXG5cclxuICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cclxuICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpLCB0aGlzLnVuc2lnbmVkKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cclxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXHJcblxyXG4gICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcclxuICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcclxuICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xyXG4gICAgYzAwICs9IGEwMCAqIGIwMDtcclxuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xyXG4gICAgYzAwICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMTYgKiBiMDA7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTAwICogYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiAqIGIwMDtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMTYgKiBiMTY7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTAwICogYjMyO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODtcclxuICAgIGM0OCAmPSAweEZGRkY7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtdWx0aXBseX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcclxuICovXHJcbkxvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoZSByZXN1bHQgaXMgc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyBzaWduZWQgb3JcclxuICogIHVuc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyB1bnNpZ25lZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikge1xyXG4gICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpXHJcbiAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTtcclxuICAgIGlmIChkaXZpc29yLmlzWmVybygpKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc2lnbmVkIGRpdmlzaW9uIG92ZXJmbG93OiB0aGUgbGFyZ2VzdFxyXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciAvIC0xIHdvdWxkIGJlIDEgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3RcclxuICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIsIGR1ZSB0byB0d28ncyBjb21wbGVtZW50LlxyXG4gICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmhpZ2ggPT09IC0weDgwMDAwMDAwICYmXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgd2l0aCBub24td2FzbSBjb2RlIHBhdGhcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20uZGl2X3UgOiB3YXNtLmRpdl9zKShcclxuICAgICAgICAgICAgdGhpcy5sb3csXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgZGl2aXNvci5sb3csXHJcbiAgICAgICAgICAgIGRpdmlzb3IuaGlnaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIHZhciBhcHByb3gsIHJlbSwgcmVzO1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKSB7XHJcbiAgICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHNpZ25lZCBsb25ncyBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZVxyXG4gICAgICAgIC8vIGNsb3N1cmUgbGlicmFyeSBhcyBhIHdob2xlLlxyXG4gICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsgIC8vIHJlY2FsbCB0aGF0IC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPTkU7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGZUaGlzID0gdGhpcy5zaHIoMSk7XHJcbiAgICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGFwcHJveC5hZGQocmVtLmRpdihkaXZpc29yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpO1xyXG4gICAgICAgIHJlcyA9IFpFUk87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRoZSBhbGdvcml0aG0gYmVsb3cgaGFzIG5vdCBiZWVuIG1hZGUgZm9yIHVuc2lnbmVkIGxvbmdzLiBJdCdzIHRoZXJlZm9yZVxyXG4gICAgICAgIC8vIHJlcXVpcmVkIHRvIHRha2Ugc3BlY2lhbCBjYXJlIG9mIHRoZSBNU0IgcHJpb3IgdG8gcnVubmluZyBpdC5cclxuICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpXHJcbiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTtcclxuICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSlcclxuICAgICAgICAgICAgcmV0dXJuIFVaRVJPO1xyXG4gICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMuc2hydSgxKSkpIC8vIDE1ID4+PiAxID0gNyA7IHdpdGggZGl2aXNvciA9IDggOyB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBVT05FO1xyXG4gICAgICAgIHJlcyA9IFVaRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXHJcbiAgICAvLyBmbG9hdGluZy1wb2ludCB0aGF0IGFwcHJveGltYXRlcyByZW1haW5kZXIgLyBvdGhlciAqZnJvbSBiZWxvdyosIGFkZCB0aGlzXHJcbiAgICAvLyBpbnRvIHRoZSByZXN1bHQsIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSByZW1haW5kZXIuICBJdCBpcyBjcml0aWNhbCB0aGF0XHJcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXHJcbiAgICAvLyByZW1haW5kZXIgbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgIHJlbSA9IHRoaXM7XHJcbiAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkge1xyXG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcclxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCB2YWx1ZS5cclxuICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7XHJcblxyXG4gICAgICAgIC8vIFdlIHdpbGwgdHdlYWsgdGhlIGFwcHJveGltYXRlIHJlc3VsdCBieSBjaGFuZ2luZyBpdCBpbiB0aGUgNDgtdGggZGlnaXQgb3JcclxuICAgICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXHJcbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgZGVsdGEgPSAobG9nMiA8PSA0OCkgPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLFxyXG5cclxuICAgICAgICAvLyBEZWNyZWFzZSB0aGUgYXBwcm94aW1hdGlvbiB1bnRpbCBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlbWFpbmRlci4gIE5vdGVcclxuICAgICAgICAvLyB0aGF0IGlmIGl0IGlzIHRvbyBsYXJnZSwgdGhlIHByb2R1Y3Qgb3ZlcmZsb3dzIGFuZCBpcyBuZWdhdGl2ZS5cclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLFxyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ndChyZW0pKSB7XHJcbiAgICAgICAgICAgIGFwcHJveCAtPSBkZWx0YTtcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXHJcbiAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlIHdlIHdvdWxkIG1ha2Ugbm8gcHJvZ3Jlc3MuXHJcbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSlcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gT05FO1xyXG5cclxuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XHJcbiAgICAgICAgcmVtID0gcmVtLnN1YihhcHByb3hSZW0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZGl2aWRlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZHVsbyA9IGZ1bmN0aW9uIG1vZHVsbyhkaXZpc29yKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSlcclxuICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLnJlbV91IDogd2FzbS5yZW1fcykoXHJcbiAgICAgICAgICAgIHRoaXMubG93LFxyXG4gICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93LFxyXG4gICAgICAgICAgICBkaXZpc29yLmhpZ2hcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI21vZHVsb30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5yZW0gPSBMb25nUHJvdG90eXBlLm1vZHVsbztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgT1Igb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIExvbmcgYW5kIHRoZSBnaXZlbiBvbmUuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcihvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsICh0aGlzLmhpZ2ggPDwgbnVtQml0cykgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG51bUJpdHMpKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IChudW1CaXRzIC0gMzIpLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0TGVmdH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoKHRoaXMubG93ID4+PiBudW1CaXRzKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hyID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIG51bUJpdHMgJj0gNjM7XHJcbiAgICBpZiAobnVtQml0cyA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoO1xyXG4gICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93O1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoKGxvdyA+Pj4gbnVtQml0cykgfCAoaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtQml0cyA9PT0gMzIpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoLCAwLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiAobnVtQml0cyAtIDMyKSwgMCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJfdSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBzaWduZWQuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHtcclxuICAgIGlmICghdGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIHVuc2lnbmVkLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFVuc2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGxlIFdoZXRoZXIgbGl0dGxlIG9yIGJpZyBlbmRpYW4sIGRlZmF1bHRzIHRvIGJpZyBlbmRpYW5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gQnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcyhsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgbG8gICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gMjRcclxuICAgIF07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzQkUgPSBmdW5jdGlvbiB0b0J5dGVzQkUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaGkgPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBsbyAgICAgICAgJiAweGZmXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBCeXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtib29sZWFuPX0gbGUgV2hldGhlciBsaXR0bGUgb3IgYmlnIGVuZGlhbiwgZGVmYXVsdHMgdG8gYmlnIGVuZGlhblxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMoYnl0ZXMsIHVuc2lnbmVkLCBsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gTG9uZy5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZy5mcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcoXHJcbiAgICAgICAgYnl0ZXNbMF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzFdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1syXSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbM10gPDwgMjQsXHJcbiAgICAgICAgYnl0ZXNbNF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzVdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s2XSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbN10gPDwgMjQsXHJcbiAgICAgICAgdW5zaWduZWRcclxuICAgICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhcclxuICAgICAgICBieXRlc1s0XSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbNV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzZdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s3XSxcclxuICAgICAgICBieXRlc1swXSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbMV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzJdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1szXSxcclxuICAgICAgICB1bnNpZ25lZFxyXG4gICAgKTtcclxufTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhclNoYXBlIHtcbiAgaWQ6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IE5QQyAqL1xuICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gdXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VGZW1hbGUgKi9cbiAgYm9keVNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gQ29sb3IzKFIgPSAwLjZmLCBHID0gMC40NjJmLCBCID0gMC4zNTZmKSAqL1xuICBza2luQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuMjgzZiwgRyA9IDAuMTQyZiwgQiA9IDBmKSAqL1xuICBoYWlyQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuNmYsIEcgPSAwLjQ2MmYsIEIgPSAwLjM1NmYpICovXG4gIGV5ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIGV4cHJlc3Npb25UcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB0aW1lc3RhbXAgKi9cbiAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGFsa2luZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIGRlZmF1bHQgPSBbXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9leWVzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZWJyb3dzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX21vdXRoXzAwXCJcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN0YW5kYXJkX2hhaXJcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc2ltcGxlX3llbGxvd190c2hpcnRcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfYnJvd25fdHJvdXNlcnNcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmJ1bl9zaG9lc1wiXVxuICAgKi9cbiAgd2VhcmFibGVzOiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJTaGFwZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGJvZHlTaGFwZTogdW5kZWZpbmVkLFxuICAgIHNraW5Db2xvcjogdW5kZWZpbmVkLFxuICAgIGhhaXJDb2xvcjogdW5kZWZpbmVkLFxuICAgIGV5ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgZXhwcmVzc2lvblRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgdGFsa2luZzogdW5kZWZpbmVkLFxuICAgIHdlYXJhYmxlczogW11cbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9keVNoYXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmJvZHlTaGFwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2tpbkNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5za2luQ29sb3IsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGFpckNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5oYWlyQ29sb3IsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXllQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmV5ZUNvbG9yLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NCkuaW50NjQobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFsa2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5ib29sKG1lc3NhZ2UudGFsa2luZylcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uud2VhcmFibGVzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcodiEpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5ib2R5U2hhcGUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5za2luQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmhhaXJDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZXllQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRhbGtpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLndlYXJhYmxlcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZGVjbGFyZSB2YXIgc2VsZjogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueSB8IHVuZGVmaW5lZFxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWRcbnZhciBnbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsVGhpc1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZlxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3dcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsXG4gIHRocm93ICdVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnXG59KSgpXG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoJ1ZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSJylcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpXG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueVxuICBfbTAuY29uZmlndXJlKClcbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJTaGFwZSB9IGZyb20gJy4vcGIvQXZhdGFyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyU2hhcGUge1xuICAgIHJldHVybiBQQkF2YXRhclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJpbGxib2FyZCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgeD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB5PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHo/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJpbGxib2FyZCgpOiBQQkJpbGxib2FyZCB7XG4gIHJldHVybiB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkLCB6OiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJpbGxib2FyZCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQmlsbGJvYXJkLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS55KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS56ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS56KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCaWxsYm9hcmQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQmlsbGJvYXJkKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS54ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UueiA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCaWxsYm9hcmQgfSBmcm9tICcuL3BiL0JpbGxib2FyZC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDkwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmRTY2hlbWE6IElTY2hlbWE8UEJCaWxsYm9hcmQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQmlsbGJvYXJkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJCaWxsYm9hcmQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQmlsbGJvYXJkIHtcbiAgICByZXR1cm4gUEJCaWxsYm9hcmQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkJpbGxib2FyZCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQmlsbGJvYXJkLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCb3hTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJveFNoYXBlKCk6IFBCQm94U2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQm94U2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkJveFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkJveFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkJveFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQm94U2hhcGUgfSBmcm9tICcuL3BiL0JveFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQm94U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQm94U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJveFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJveFNoYXBlIHtcbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQm94U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ2FtZXJhTW9kZVZhbHVlIH0gZnJvbSAnLi9jb21tb24vQ2FtZXJhTW9kZVZhbHVlLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ2FtZXJhTW9kZSB7XG4gIG1vZGU6IENhbWVyYU1vZGVWYWx1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKCk6IFBCQ2FtZXJhTW9kZSB7XG4gIHJldHVybiB7IG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkNhbWVyYU1vZGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tb2RlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZSB9IGZyb20gJy4vcGIvQ2FtZXJhTW9kZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDYW1lcmFNb2RlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDYW1lcmFNb2RlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGUge1xuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkNhbWVyYU1vZGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDYW1lcmFNb2RlVmFsdWUgfSBmcm9tICcuL2NvbW1vbi9DYW1lcmFNb2RlVmFsdWUuZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDYW1lcmFNb2RlQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbW9kZTogQ2FtZXJhTW9kZVZhbHVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGVBcmVhKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICByZXR1cm4geyBhcmVhOiB1bmRlZmluZWQsIG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGVBcmVhID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDYW1lcmFNb2RlQXJlYSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFyZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5hcmVhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1vZGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZUFyZWEoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmFyZWEgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZUFyZWEgfSBmcm9tICcuL3BiL0NhbWVyYU1vZGVBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZUFyZWE+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ2FtZXJhTW9kZUFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkNhbWVyYU1vZGVBcmVhLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGVBcmVhLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDeWxpbmRlclNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCxcbiAgICBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIHJhZGl1c1RvcDogdW5kZWZpbmVkLFxuICAgIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDeWxpbmRlclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDeWxpbmRlclNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLnJhZGl1c1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ3lsaW5kZXJTaGFwZSB9IGZyb20gJy4vcGIvQ3lsaW5kZXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQ3lsaW5kZXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDeWxpbmRlclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDeWxpbmRlclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkdMVEZTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKTogUEJHTFRGU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgc3JjOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCR0xURlNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJHTFRGU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJHTFRGU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCR0xURlNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCR0xURlNoYXBlIH0gZnJvbSAnLi9wYi9HTFRGU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCR0xURlNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkdMVEZTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCR0xURlNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkdMVEZTaGFwZSB7XG4gICAgcmV0dXJuIFBCR0xURlNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJHTFRGU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gVGV4dHVyZVdyYXBNb2RlIHtcbiAgUmVwZWF0ID0gMCxcbiAgQ2xhbXAgPSAxLFxuICBNaXJyb3IgPSAyLFxuICBNaXJyb3JPbmNlID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyTW9kZSB7XG4gIFBvaW50ID0gMCxcbiAgQmlsaW5lYXIgPSAxLFxuICBUcmlsaW5lYXIgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUcmFuc3BhcmVuY3lNb2RlIHtcbiAgT3BhcXVlID0gMCxcbiAgQWxwaGFUZXN0ID0gMSxcbiAgQWxwaGFCbGVuZCA9IDIsXG4gIEFscGhhVGVzdEFuZEFscGhhQmxlbmQgPSAzLFxuICBBdXRvID0gNCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsIHtcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIHRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUuIHJhbmdlIHZhbHVlOiBmcm9tIDAgdG8gMSAqL1xuICBhbHBoYVRlc3Q/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAgdHJ1ZSAqL1xuICBjYXN0U2hhZG93cz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGFscGhhVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgZW1pc3NpdmVUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBidW1wVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IHdoaXRlOyAqL1xuICBhbGJlZG9Db2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IGJsYWNrOyAqL1xuICBlbWlzc2l2ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gd2hpdGU7ICovXG4gIHJlZmxlY3Rpdml0eUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gVHJhbnNwYXJlbmN5TW9kZS5BdXRvICovXG4gIHRyYW5zcGFyZW5jeU1vZGU/OiBUcmFuc3BhcmVuY3lNb2RlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIG1ldGFsbGljPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIHJvdWdobmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgZ2xvc3NpbmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgc3BlY3VsYXJJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAyICovXG4gIGVtaXNzaXZlSW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBkaXJlY3RJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsX1RleHR1cmUge1xuICBzcmM6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IFRleHR1cmVXcmFwTW9kZS5DbGFtcCAqL1xuICB3cmFwTW9kZT86IFRleHR1cmVXcmFwTW9kZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IEZpbHRlck1vZGUuQmlsaW5lYXIgKi9cbiAgZmlsdGVyTW9kZT86IEZpbHRlck1vZGUgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWF0ZXJpYWwoKTogUEJNYXRlcmlhbCB7XG4gIHJldHVybiB7XG4gICAgdGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGFscGhhVGVzdDogdW5kZWZpbmVkLFxuICAgIGNhc3RTaGFkb3dzOiB1bmRlZmluZWQsXG4gICAgYWxwaGFUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYnVtcFRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBhbGJlZG9Db2xvcjogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICByZWZsZWN0aXZpdHlDb2xvcjogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW5jeU1vZGU6IHVuZGVmaW5lZCxcbiAgICBtZXRhbGxpYzogdW5kZWZpbmVkLFxuICAgIHJvdWdobmVzczogdW5kZWZpbmVkLFxuICAgIGdsb3NzaW5lc3M6IHVuZGVmaW5lZCxcbiAgICBzcGVjdWxhckludGVuc2l0eTogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlSW50ZW5zaXR5OiB1bmRlZmluZWQsXG4gICAgZGlyZWN0SW50ZW5zaXR5OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1hdGVyaWFsID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLnRleHR1cmUsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UuYWxwaGFUZXN0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jYXN0U2hhZG93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuY2FzdFNoYWRvd3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFscGhhVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuYWxwaGFUZXh0dXJlLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJ1bXBUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5idW1wVGV4dHVyZSwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGJlZG9Db2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuYWxiZWRvQ29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciwgd3JpdGVyLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IsIHdyaXRlci51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1ldGFsbGljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UubWV0YWxsaWMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwMSkuZmxvYXQobWVzc2FnZS5yb3VnaG5lc3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdsb3NzaW5lc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDkpLmZsb2F0KG1lc3NhZ2UuZ2xvc3NpbmVzcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzMpLmZsb2F0KG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNYXRlcmlhbCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYWxwaGFUZXN0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5jYXN0U2hhZG93cyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbHBoYVRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuYnVtcFRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmFsYmVkb0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UubWV0YWxsaWMgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5yb3VnaG5lc3MgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5nbG9zc2luZXNzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdEludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1hdGVyaWFsX1RleHR1cmUoKTogUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgcmV0dXJuIHsgc3JjOiAnJywgd3JhcE1vZGU6IHVuZGVmaW5lZCwgZmlsdGVyTW9kZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNYXRlcmlhbF9UZXh0dXJlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbF9UZXh0dXJlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53cmFwTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLndyYXBNb2RlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5maWx0ZXJNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UuZmlsdGVyTW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbF9UZXh0dXJlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS53cmFwTW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZpbHRlck1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJNYXRlcmlhbCB9IGZyb20gJy4vcGIvTWF0ZXJpYWwuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxN1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWF0ZXJpYWxTY2hlbWE6IElTY2hlbWE8UEJNYXRlcmlhbD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNYXRlcmlhbCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWF0ZXJpYWwuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTWF0ZXJpYWwge1xuICAgIHJldHVybiBQQk1hdGVyaWFsLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNYXRlcmlhbCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTWF0ZXJpYWwuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sbGlkZXJMYXllciB7XG4gIE5vbmUgPSAwLFxuICBQb2ludGVyID0gMSxcbiAgUGh5c2ljcyA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXIge1xuICAvKiogZGVmYXVsdCA9IENvbGxpZGVyTGF5ZXIuUGh5c2ljcyB8IENvbGxpZGVyTGF5ZXIuUG9pbnRlciAqL1xuICBjb2xsaXNpb25NYXNrPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGJveDogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB7XG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge31cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgcmV0dXJuIHsgY29sbGlzaW9uTWFzazogdW5kZWZpbmVkLCBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaENvbGxpZGVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY29sbGlzaW9uTWFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuY29sbGlzaW9uTWFzaylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbGxpc2lvbk1hc2sgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaENvbGxpZGVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoKCk6IFBCTWVzaENvbGxpZGVyX0JveE1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoKCk6IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hDb2xsaWRlciB9IGZyb20gJy4vcGIvTWVzaENvbGxpZGVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hDb2xsaWRlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoQ29sbGlkZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hDb2xsaWRlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoQ29sbGlkZXIge1xuICAgIHJldHVybiBQQk1lc2hDb2xsaWRlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoQ29sbGlkZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlciB7XG4gIGJveDogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gIHV2czogbnVtYmVyW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICB1dnM6IG51bWJlcltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7fVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKTogUEJNZXNoUmVuZGVyZXIge1xuICByZXR1cm4geyBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICByZXR1cm4geyB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7IHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hSZW5kZXJlciB9IGZyb20gJy4vcGIvTWVzaFJlbmRlcmVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMThcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hSZW5kZXJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoUmVuZGVyZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hSZW5kZXJlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIHJldHVybiBQQk1lc2hSZW5kZXJlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoUmVuZGVyZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xuICBhc3NldElkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHN0eWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk5GVFNoYXBlKCk6IFBCTkZUU2hhcGUge1xuICByZXR1cm4ge1xuICAgIHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsXG4gICAgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBzcmM6ICcnLFxuICAgIGFzc2V0SWQ6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk5GVFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJORlRTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFzc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXNzZXRJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5zdHlsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmNvbG9yLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk5GVFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk5GVFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuYXNzZXRJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5jb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyRG93biB7XG4gIC8qKiBkZWZhdWx0PUFjdGlvbkJ1dHRvbi5BTlkgKi9cbiAgYnV0dG9uPzogQWN0aW9uQnV0dG9uIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdJbnRlcmFjdCcgKi9cbiAgaG92ZXJUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIG1heERpc3RhbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgc2hvd0ZlZWRiYWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duKCk6IFBCT25Qb2ludGVyRG93biB7XG4gIHJldHVybiB7IGJ1dHRvbjogdW5kZWZpbmVkLCBob3ZlclRleHQ6IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IHVuZGVmaW5lZCwgc2hvd0ZlZWRiYWNrOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93bigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaG92ZXJUZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWF4RGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNob3dGZWVkYmFjayA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25TY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd24sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd24uZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93biB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93biB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICBidXR0b246IEFjdGlvbkJ1dHRvblxuICBtZXNoTmFtZTogc3RyaW5nXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgcG9pbnQ6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93blJlc3VsdCgpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd25SZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXNoTmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLm1lc2hOYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9pbnQsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9ybWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uubm9ybWFsLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3RhbmNlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY5KS5mbG9hdChtZXNzYWdlLmRpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50aW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd25SZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1lc2hOYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UucG9pbnQgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5ub3JtYWwgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5kaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duUmVzdWx0IH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjZcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duUmVzdWx0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd25SZXN1bHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwIHtcbiAgLyoqIGRlZmF1bHQ9QWN0aW9uQnV0dG9uLkFOWSAqL1xuICBidXR0b24/OiBBY3Rpb25CdXR0b24gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J0ludGVyYWN0JyAqL1xuICBob3ZlclRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgbWF4RGlzdGFuY2U/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBzaG93RmVlZGJhY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKCk6IFBCT25Qb2ludGVyVXAge1xuICByZXR1cm4geyBidXR0b246IHVuZGVmaW5lZCwgaG92ZXJUZXh0OiB1bmRlZmluZWQsIG1heERpc3RhbmNlOiB1bmRlZmluZWQsIHNob3dGZWVkYmFjazogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJVcCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyVXAsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5ob3ZlclRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhEaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlclVwIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJVcC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDYxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlclVwPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlclVwLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJVcC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJVcCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXAuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlclVwIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgbWVzaE5hbWU6IHN0cmluZ1xuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIHBvaW50OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG5vcm1hbDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXN0YW5jZTogbnVtYmVyXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlclVwUmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJVcFJlc3VsdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc2hOYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm9yaWdpbiwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5kaXJlY3Rpb24sIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5wb2ludCwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWwsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzdGFuY2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjkpLmZsb2F0KG1lc3NhZ2UuZGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS50aW1lc3RhbXApXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tZXNoTmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uubm9ybWFsID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyVXBSZXN1bHQgfSBmcm9tICcuL3BiL09uUG9pbnRlclVwUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjVcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyVXBSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyVXBSZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlclVwUmVzdWx0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcFJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlclVwUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQbGFuZVNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUGxhbmVTaGFwZSgpOiBQQlBsYW5lU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUGxhbmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUGxhbmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQbGFuZVNoYXBlIH0gZnJvbSAnLi9wYi9QbGFuZVNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJQbGFuZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBsYW5lU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBsYW5lU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUGxhbmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gUG9pbnRlckV2ZW50VHlwZSB7XG4gIFVQID0gMCxcbiAgRE9XTiA9IDEsXG4gIEhPVkVSX0VOVEVSID0gMixcbiAgSE9WRVJfTEVBVkUgPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCUG9pbnRlckV2ZW50cyB7XG4gIHBvaW50ZXJFdmVudHM6IFBCUG9pbnRlckV2ZW50c19FbnRyeVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyRXZlbnRzX0luZm8ge1xuICAvKiogZGVmYXVsdD1BY3Rpb25CdXR0b24uQU5ZICovXG4gIGJ1dHRvbj86IEFjdGlvbkJ1dHRvbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nSW50ZXJhY3QnICovXG4gIGhvdmVyVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xMCAqL1xuICBtYXhEaXN0YW5jZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHNob3dGZWVkYmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQlBvaW50ZXJFdmVudHNfRW50cnkge1xuICBldmVudFR5cGU6IFBvaW50ZXJFdmVudFR5cGVcbiAgZXZlbnRJbmZvOiBQQlBvaW50ZXJFdmVudHNfSW5mbyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQb2ludGVyRXZlbnRzKCk6IFBCUG9pbnRlckV2ZW50cyB7XG4gIHJldHVybiB7IHBvaW50ZXJFdmVudHM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJQb2ludGVyRXZlbnRzID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyRXZlbnRzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucG9pbnRlckV2ZW50cykge1xuICAgICAgUEJQb2ludGVyRXZlbnRzX0VudHJ5LmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ZXJFdmVudHMucHVzaChQQlBvaW50ZXJFdmVudHNfRW50cnkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckV2ZW50c19JbmZvKCk6IFBCUG9pbnRlckV2ZW50c19JbmZvIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiB1bmRlZmluZWQsIGhvdmVyVGV4dDogdW5kZWZpbmVkLCBtYXhEaXN0YW5jZTogdW5kZWZpbmVkLCBzaG93RmVlZGJhY2s6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckV2ZW50c19JbmZvID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyRXZlbnRzX0luZm8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBvaW50ZXJFdmVudHNfSW5mbyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQb2ludGVyRXZlbnRzX0luZm8oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhvdmVyVGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zaG93RmVlZGJhY2sgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNfRW50cnkoKTogUEJQb2ludGVyRXZlbnRzX0VudHJ5IHtcbiAgcmV0dXJuIHsgZXZlbnRUeXBlOiAwLCBldmVudEluZm86IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckV2ZW50c19FbnRyeSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUG9pbnRlckV2ZW50c19FbnRyeSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmV2ZW50VHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmV2ZW50VHlwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXZlbnRJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCUG9pbnRlckV2ZW50c19JbmZvLmVuY29kZShtZXNzYWdlLmV2ZW50SW5mbywgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzX0VudHJ5IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNfRW50cnkoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmV2ZW50VHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmV2ZW50SW5mbyA9IFBCUG9pbnRlckV2ZW50c19JbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi9wYi9Qb2ludGVyRXZlbnRzLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJFdmVudHNTY2hlbWE6IElTY2hlbWE8UEJQb2ludGVyRXZlbnRzPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBvaW50ZXJFdmVudHMsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBvaW50ZXJFdmVudHMuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUG9pbnRlckV2ZW50cyB7XG4gICAgcmV0dXJuIFBCUG9pbnRlckV2ZW50cy5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUG9pbnRlckV2ZW50cyB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUG9pbnRlckV2ZW50cy5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gJ2xvbmcnXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlJheWNhc3RSZXN1bHQge1xuICB0aW1lc3RhbXA6IG51bWJlclxuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGhpdHM6IFJheWNhc3RIaXRbXVxufVxuXG4vKiogUG9zaXRpb24gd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgc2NlbmUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF5Y2FzdEhpdCB7XG4gIHBvc2l0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsSGl0OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGxlbmd0aDogbnVtYmVyXG4gIG1lc2hOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGVudGl0eUlkPzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlJheWNhc3RSZXN1bHQoKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgcmV0dXJuIHsgdGltZXN0YW1wOiAwLCBvcmlnaW46IHVuZGVmaW5lZCwgZGlyZWN0aW9uOiB1bmRlZmluZWQsIGhpdHM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJSYXljYXN0UmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJSYXljYXN0UmVzdWx0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmhpdHMpIHtcbiAgICAgIFJheWNhc3RIaXQuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlJheWNhc3RSZXN1bHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCUmF5Y2FzdFJlc3VsdCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5vcmlnaW4gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5oaXRzLnB1c2goUmF5Y2FzdEhpdC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUmF5Y2FzdEhpdCgpOiBSYXljYXN0SGl0IHtcbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogdW5kZWZpbmVkLFxuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRpcmVjdGlvbjogdW5kZWZpbmVkLFxuICAgIG5vcm1hbEhpdDogdW5kZWZpbmVkLFxuICAgIGxlbmd0aDogMCxcbiAgICBtZXNoTmFtZTogdW5kZWZpbmVkLFxuICAgIGVudGl0eUlkOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSYXljYXN0SGl0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUmF5Y2FzdEhpdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9zaXRpb24sIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWxIaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWxIaXQsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLmxlbmd0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWVzaE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MCkuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVudGl0eUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTYpLmludDY0KG1lc3NhZ2UuZW50aXR5SWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBSYXljYXN0SGl0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VSYXljYXN0SGl0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm5vcm1hbEhpdCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmxlbmd0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubWVzaE5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5lbnRpdHlJZCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5kZWNsYXJlIHZhciBzZWxmOiBhbnkgfCB1bmRlZmluZWRcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueSB8IHVuZGVmaW5lZFxudmFyIGdsb2JhbFRoaXM6IGFueSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzXG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBzZWxmXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvd1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxcbiAgdGhyb3cgJ1VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCdcbn0pKClcblxuZnVuY3Rpb24gbG9uZ1RvTnVtYmVyKGxvbmc6IExvbmcpOiBudW1iZXIge1xuICBpZiAobG9uZy5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcignVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVInKVxuICB9XG4gIHJldHVybiBsb25nLnRvTnVtYmVyKClcbn1cblxuaWYgKF9tMC51dGlsLkxvbmcgIT09IExvbmcpIHtcbiAgX20wLnV0aWwuTG9uZyA9IExvbmcgYXMgYW55XG4gIF9tMC5jb25maWd1cmUoKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBQb2ludGVyRXZlbnRUeXBlIH0gZnJvbSAnLi9Qb2ludGVyRXZlbnRzLmdlbidcbmltcG9ydCB7IFJheWNhc3RIaXQgfSBmcm9tICcuL1JheWNhc3RSZXN1bHQuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbi8qKiB0aGUgcmVuZGVyZXIgd2lsbCBzZXQgdGhpcyBjb21wb25lbnQgdG8gdGhlIHJvb3QgZW50aXR5IG9uY2UgcGVyIGZyYW1lIHdpdGggYWxsIHRoZSBldmVudHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgLyoqIGEgbGlzdCBvZiB0aGUgbGFzdCBOIHBvaW50ZXIgY29tbWFuZHMgKGZyb20gdGhlIGVuZ2luZSkgKi9cbiAgY29tbWFuZHM6IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZFtdXG59XG5cbi8qKiB0aGlzIG1lc3NhZ2UgcmVwcmVzZW50cyBhIHBvaW50ZXIgZXZlbnQsIHVzZWQgYm90aCBmb3IgVVAgYW5kIERPV04gYWN0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQge1xuICAvKiogaWRlbnRpZmllciBvZiB0aGUgaW5wdXQgKi9cbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgaGl0OiBSYXljYXN0SGl0IHwgdW5kZWZpbmVkXG4gIHN0YXRlOiBQb2ludGVyRXZlbnRUeXBlXG4gIC8qKiBjb3VsZCBiZSBhIExhbXBvcnQgdGltZXN0YW1wICovXG4gIHRpbWVzdGFtcDogbnVtYmVyXG4gIC8qKiBpZiB0aGUgaW5wdXQgaXMgYW5hbG9nIHRoZW4gd2Ugc3RvcmUgaXQgaGVyZSAqL1xuICBhbmFsb2c/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckV2ZW50c1Jlc3VsdCgpOiBQQlBvaW50ZXJFdmVudHNSZXN1bHQge1xuICByZXR1cm4geyBjb21tYW5kczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJFdmVudHNSZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJFdmVudHNSZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5jb21tYW5kcykge1xuICAgICAgUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbW1hbmRzLnB1c2goUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQoKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiAwLCBoaXQ6IHVuZGVmaW5lZCwgc3RhdGU6IDAsIHRpbWVzdGFtcDogMCwgYW5hbG9nOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBSYXljYXN0SGl0LmVuY29kZShtZXNzYWdlLmhpdCwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zdGF0ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuaW50MzIobWVzc2FnZS5zdGF0ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYW5hbG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTMpLmZsb2F0KG1lc3NhZ2UuYW5hbG9nKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhpdCA9IFJheWNhc3RIaXQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5hbmFsb2cgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBvaW50ZXJFdmVudHNSZXN1bHQgfSBmcm9tICcuL3BiL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYTogSVNjaGVtYTxQQlBvaW50ZXJFdmVudHNSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUG9pbnRlckV2ZW50c1Jlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUG9pbnRlckV2ZW50c1Jlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICByZXR1cm4gUEJQb2ludGVyRXZlbnRzUmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQb2ludGVyRXZlbnRzUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyTG9jayB7XG4gIGlzUG9pbnRlckxvY2tlZDogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQb2ludGVyTG9jaygpOiBQQlBvaW50ZXJMb2NrIHtcbiAgcmV0dXJuIHsgaXNQb2ludGVyTG9ja2VkOiBmYWxzZSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckxvY2sgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJMb2NrLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJMb2NrKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCUG9pbnRlckxvY2sgfSBmcm9tICcuL3BiL1BvaW50ZXJMb2NrLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrU2NoZW1hOiBJU2NoZW1hPFBCUG9pbnRlckxvY2s+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUG9pbnRlckxvY2ssIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBvaW50ZXJMb2NrLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICByZXR1cm4gUEJQb2ludGVyTG9jay5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUG9pbnRlckxvY2sge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlBvaW50ZXJMb2NrLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFJheWNhc3RRdWVyeVR5cGUge1xuICBISVRfRklSU1QgPSAwLFxuICBRVUVSWV9BTEwgPSAxLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCUmF5Y2FzdCB7XG4gIHRpbWVzdGFtcDogbnVtYmVyXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbWF4RGlzdGFuY2U6IG51bWJlclxuICBxdWVyeVR5cGU6IFJheWNhc3RRdWVyeVR5cGVcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUmF5Y2FzdCgpOiBQQlJheWNhc3Qge1xuICByZXR1cm4geyB0aW1lc3RhbXA6IDAsIG9yaWdpbjogdW5kZWZpbmVkLCBkaXJlY3Rpb246IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IDAsIHF1ZXJ5VHlwZTogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUmF5Y2FzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUmF5Y2FzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhEaXN0YW5jZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucXVlcnlUeXBlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnF1ZXJ5VHlwZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUmF5Y2FzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJSYXljYXN0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXAgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5xdWVyeVR5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJSYXljYXN0IH0gZnJvbSAnLi9wYi9SYXljYXN0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFJheWNhc3RTY2hlbWE6IElTY2hlbWE8UEJSYXljYXN0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlJheWNhc3QsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlJheWNhc3QuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUmF5Y2FzdCB7XG4gICAgcmV0dXJuIFBCUmF5Y2FzdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUmF5Y2FzdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUmF5Y2FzdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlJheWNhc3RSZXN1bHQgfSBmcm9tICcuL3BiL1JheWNhc3RSZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2OFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmF5Y2FzdFJlc3VsdFNjaGVtYTogSVNjaGVtYTxQQlJheWNhc3RSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUmF5Y2FzdFJlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUmF5Y2FzdFJlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgICByZXR1cm4gUEJSYXljYXN0UmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJSYXljYXN0UmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJTcGhlcmVTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlNwaGVyZVNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJTcGhlcmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlNwaGVyZVNoYXBlIH0gZnJvbSAnLi9wYi9TcGhlcmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlNwaGVyZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlNwaGVyZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJTcGhlcmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlRleHRTaGFwZSB7XG4gIHRleHQ6IHN0cmluZ1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgZm9udD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBmICovXG4gIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgZm9udFNpemU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgZm9udEF1dG9TaXplPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nY2VudGVyJyAqL1xuICBoVGV4dEFsaWduPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdjZW50ZXInICovXG4gIHZUZXh0QWxpZ24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MSAqL1xuICB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xICovXG4gIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdSaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdMZWZ0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVTcGFjaW5nPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVDb3VudD86IG51bWJlciB8IHVuZGVmaW5lZFxuICB0ZXh0V3JhcHBpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNoYWRvd0JsdXI/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc2hhZG93T2Zmc2V0WD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBzaGFkb3dPZmZzZXRZPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIG91dGxpbmVXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIHNoYWRvd0NvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgb3V0bGluZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgdGV4dENvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpOiBQQlRleHRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogJycsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIGZvbnQ6IHVuZGVmaW5lZCxcbiAgICBvcGFjaXR5OiB1bmRlZmluZWQsXG4gICAgZm9udFNpemU6IHVuZGVmaW5lZCxcbiAgICBmb250QXV0b1NpemU6IHVuZGVmaW5lZCxcbiAgICBoVGV4dEFsaWduOiB1bmRlZmluZWQsXG4gICAgdlRleHRBbGlnbjogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1RvcDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdSaWdodDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdCb3R0b206IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nTGVmdDogdW5kZWZpbmVkLFxuICAgIGxpbmVTcGFjaW5nOiB1bmRlZmluZWQsXG4gICAgbGluZUNvdW50OiB1bmRlZmluZWQsXG4gICAgdGV4dFdyYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Qmx1cjogdW5kZWZpbmVkLFxuICAgIHNoYWRvd09mZnNldFg6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dPZmZzZXRZOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZVdpZHRoOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Q29sb3I6IHVuZGVmaW5lZCxcbiAgICBvdXRsaW5lQ29sb3I6IHVuZGVmaW5lZCxcbiAgICB0ZXh0Q29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVGV4dFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJUZXh0U2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5mb250KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uub3BhY2l0eSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udFNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5mb250U2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udEF1dG9TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5mb250QXV0b1NpemUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhUZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuaFRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudlRleHRBbGlnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS52VGV4dEFsaWduKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDc3KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4NSkuZmxvYXQobWVzc2FnZS5oZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA5KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdCb3R0b20pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5saW5lU3BhY2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5saW5lU3BhY2luZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI4KS5pbnQzMihtZXNzYWdlLmxpbmVDb3VudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dFdyYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5ib29sKG1lc3NhZ2UudGV4dFdyYXBwaW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dCbHVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLnNoYWRvd0JsdXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNTcpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2NSkuZmxvYXQobWVzc2FnZS5zaGFkb3dPZmZzZXRZKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRsaW5lV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNzMpLmZsb2F0KG1lc3NhZ2Uub3V0bGluZVdpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2hhZG93Q29sb3IsIHdyaXRlci51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uub3V0bGluZUNvbG9yLCB3cml0ZXIudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVGV4dFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZm9udCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9wYWNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRTaXplID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5mb250QXV0b1NpemUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuaFRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLnZUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5saW5lU3BhY2luZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVDb3VudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLnRleHRXcmFwcGluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Qmx1ciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRZID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZVdpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlRleHRTaGFwZSB9IGZyb20gJy4vcGIvVGV4dFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlRleHRTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJUZXh0U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlRleHRTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJUZXh0U2hhcGUge1xuICAgIHJldHVybiBQQlRleHRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVGV4dFNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJVaVRleHQge1xuICB0ZXh0OiBzdHJpbmdcbiAgdGV4dENvbG9yOiBDb2xvcjMgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVWlUZXh0KCk6IFBCVWlUZXh0IHtcbiAgcmV0dXJuIHsgdGV4dDogJycsIHRleHRDb2xvcjogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJVaVRleHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlVpVGV4dCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHQgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS50ZXh0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJVaVRleHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUZXh0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dENvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJVaVRleHQgfSBmcm9tICcuL3BiL1VpVGV4dC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDUyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBVaVRleHRTY2hlbWE6IElTY2hlbWE8UEJVaVRleHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVWlUZXh0LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJVaVRleHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVWlUZXh0IHtcbiAgICByZXR1cm4gUEJVaVRleHQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlVpVGV4dCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVWlUZXh0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHUG9zaXRpb25UeXBlIHtcbiAgWUdQb3NpdGlvblR5cGVTdGF0aWMgPSAwLFxuICBZR1Bvc2l0aW9uVHlwZVJlbGF0aXZlID0gMSxcbiAgWUdQb3NpdGlvblR5cGVBYnNvbHV0ZSA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHQWxpZ24ge1xuICBZR0FsaWduQXV0byA9IDAsXG4gIFlHQWxpZ25GbGV4U3RhcnQgPSAxLFxuICBZR0FsaWduQ2VudGVyID0gMixcbiAgWUdBbGlnbkZsZXhFbmQgPSAzLFxuICBZR0FsaWduU3RyZXRjaCA9IDQsXG4gIFlHQWxpZ25CYXNlbGluZSA9IDUsXG4gIFlHQWxpZ25TcGFjZUJldHdlZW4gPSA2LFxuICBZR0FsaWduU3BhY2VBcm91bmQgPSA3LFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR1VuaXQge1xuICBZR1VuaXRVbmRlZmluZWQgPSAwLFxuICBZR1VuaXRQb2ludCA9IDEsXG4gIFlHVW5pdFBlcmNlbnQgPSAyLFxuICBZR1VuaXRBdXRvID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gWUdEaXJlY3Rpb24ge1xuICBZR0RpcmVjdGlvbkluaGVyaXQgPSAwLFxuICBZR0RpcmVjdGlvbkxUUiA9IDEsXG4gIFlHRGlyZWN0aW9uUlRMID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gWUdGbGV4RGlyZWN0aW9uIHtcbiAgWUdGbGV4RGlyZWN0aW9uQ29sdW1uID0gMCxcbiAgWUdGbGV4RGlyZWN0aW9uQ29sdW1uUmV2ZXJzZSA9IDEsXG4gIFlHRmxleERpcmVjdGlvblJvdyA9IDIsXG4gIFlHRmxleERpcmVjdGlvblJvd1JldmVyc2UgPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR1dyYXAge1xuICBZR1dyYXBOb1dyYXAgPSAwLFxuICBZR1dyYXBXcmFwID0gMSxcbiAgWUdXcmFwV3JhcFJldmVyc2UgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR0p1c3RpZnkge1xuICBZR0p1c3RpZnlGbGV4U3RhcnQgPSAwLFxuICBZR0p1c3RpZnlDZW50ZXIgPSAxLFxuICBZR0p1c3RpZnlGbGV4RW5kID0gMixcbiAgWUdKdXN0aWZ5U3BhY2VCZXR3ZWVuID0gMyxcbiAgWUdKdXN0aWZ5U3BhY2VBcm91bmQgPSA0LFxuICBZR0p1c3RpZnlTcGFjZUV2ZW5seSA9IDUsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHT3ZlcmZsb3cge1xuICBZR092ZXJmbG93VmlzaWJsZSA9IDAsXG4gIFlHT3ZlcmZsb3dIaWRkZW4gPSAxLFxuICBZR092ZXJmbG93U2Nyb2xsID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gWUdEaXNwbGF5IHtcbiAgWUdEaXNwbGF5RmxleCA9IDAsXG4gIFlHRGlzcGxheU5vbmUgPSAxLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR0VkZ2Uge1xuICBZR0VkZ2VMZWZ0ID0gMCxcbiAgWUdFZGdlVG9wID0gMSxcbiAgWUdFZGdlUmlnaHQgPSAyLFxuICBZR0VkZ2VCb3R0b20gPSAzLFxuICBZR0VkZ2VTdGFydCA9IDQsXG4gIFlHRWRnZUVuZCA9IDUsXG4gIFlHRWRnZUhvcml6b250YWwgPSA2LFxuICBZR0VkZ2VWZXJ0aWNhbCA9IDcsXG4gIFlHRWRnZUFsbCA9IDgsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJVaVRyYW5zZm9ybSB7XG4gIHBhcmVudDogbnVtYmVyXG4gIHJpZ2h0T2Y6IG51bWJlclxuICBwb3NpdGlvblR5cGU6IFlHUG9zaXRpb25UeXBlXG4gIGFsaWduQ29udGVudDogWUdBbGlnblxuICBhbGlnbkl0ZW1zOiBZR0FsaWduXG4gIGFsaWduU2VsZjogWUdBbGlnblxuICBmbGV4RGlyZWN0aW9uOiBZR0ZsZXhEaXJlY3Rpb25cbiAgZmxleFdyYXA6IFlHV3JhcFxuICBqdXN0aWZ5Q29udGVudDogWUdKdXN0aWZ5XG4gIG92ZXJmbG93OiBZR092ZXJmbG93XG4gIGRpc3BsYXk6IFlHRGlzcGxheVxuICBkaXJlY3Rpb246IFlHRGlyZWN0aW9uXG4gIGZsZXg6IG51bWJlclxuICBmbGV4QmFzaXNVbml0OiBZR1VuaXRcbiAgZmxleEJhc2lzOiBudW1iZXJcbiAgZmxleEdyb3c6IG51bWJlclxuICBmbGV4U2hyaW5rOiBudW1iZXJcbiAgd2lkdGhVbml0OiBZR1VuaXRcbiAgd2lkdGg6IG51bWJlclxuICBoZWlnaHRVbml0OiBZR1VuaXRcbiAgaGVpZ2h0OiBudW1iZXJcbiAgbWluV2lkdGhVbml0OiBZR1VuaXRcbiAgbWluV2lkdGg6IG51bWJlclxuICBtaW5IZWlnaHRVbml0OiBZR1VuaXRcbiAgbWluSGVpZ2h0OiBudW1iZXJcbiAgbWF4V2lkdGhVbml0OiBZR1VuaXRcbiAgbWF4V2lkdGg6IG51bWJlclxuICBtYXhIZWlnaHRVbml0OiBZR1VuaXRcbiAgbWF4SGVpZ2h0OiBudW1iZXJcbiAgcG9zaXRpb25MZWZ0VW5pdDogWUdVbml0XG4gIHBvc2l0aW9uTGVmdDogbnVtYmVyXG4gIHBvc2l0aW9uVG9wVW5pdDogWUdVbml0XG4gIHBvc2l0aW9uVG9wOiBudW1iZXJcbiAgcG9zaXRpb25SaWdodFVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvblJpZ2h0OiBudW1iZXJcbiAgcG9zaXRpb25Cb3R0b21Vbml0OiBZR1VuaXRcbiAgcG9zaXRpb25Cb3R0b206IG51bWJlclxuICAvKiogbWFyZ2luICovXG4gIG1hcmdpbkxlZnRVbml0OiBZR1VuaXRcbiAgbWFyZ2luTGVmdDogbnVtYmVyXG4gIG1hcmdpblRvcFVuaXQ6IFlHVW5pdFxuICBtYXJnaW5Ub3A6IG51bWJlclxuICBtYXJnaW5SaWdodFVuaXQ6IFlHVW5pdFxuICBtYXJnaW5SaWdodDogbnVtYmVyXG4gIG1hcmdpbkJvdHRvbVVuaXQ6IFlHVW5pdFxuICBtYXJnaW5Cb3R0b206IG51bWJlclxuICBwYWRkaW5nTGVmdFVuaXQ6IFlHVW5pdFxuICBwYWRkaW5nTGVmdDogbnVtYmVyXG4gIHBhZGRpbmdUb3BVbml0OiBZR1VuaXRcbiAgcGFkZGluZ1RvcDogbnVtYmVyXG4gIHBhZGRpbmdSaWdodFVuaXQ6IFlHVW5pdFxuICBwYWRkaW5nUmlnaHQ6IG51bWJlclxuICBwYWRkaW5nQm90dG9tVW5pdDogWUdVbml0XG4gIHBhZGRpbmdCb3R0b206IG51bWJlclxuICBib3JkZXJMZWZ0OiBudW1iZXJcbiAgYm9yZGVyVG9wOiBudW1iZXJcbiAgYm9yZGVyUmlnaHQ6IG51bWJlclxuICBib3JkZXJCb3R0b206IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJVaVRyYW5zZm9ybSgpOiBQQlVpVHJhbnNmb3JtIHtcbiAgcmV0dXJuIHtcbiAgICBwYXJlbnQ6IDAsXG4gICAgcmlnaHRPZjogMCxcbiAgICBwb3NpdGlvblR5cGU6IDAsXG4gICAgYWxpZ25Db250ZW50OiAwLFxuICAgIGFsaWduSXRlbXM6IDAsXG4gICAgYWxpZ25TZWxmOiAwLFxuICAgIGZsZXhEaXJlY3Rpb246IDAsXG4gICAgZmxleFdyYXA6IDAsXG4gICAganVzdGlmeUNvbnRlbnQ6IDAsXG4gICAgb3ZlcmZsb3c6IDAsXG4gICAgZGlzcGxheTogMCxcbiAgICBkaXJlY3Rpb246IDAsXG4gICAgZmxleDogMCxcbiAgICBmbGV4QmFzaXNVbml0OiAwLFxuICAgIGZsZXhCYXNpczogMCxcbiAgICBmbGV4R3JvdzogMCxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIHdpZHRoVW5pdDogMCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHRVbml0OiAwLFxuICAgIGhlaWdodDogMCxcbiAgICBtaW5XaWR0aFVuaXQ6IDAsXG4gICAgbWluV2lkdGg6IDAsXG4gICAgbWluSGVpZ2h0VW5pdDogMCxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gICAgbWF4V2lkdGhVbml0OiAwLFxuICAgIG1heFdpZHRoOiAwLFxuICAgIG1heEhlaWdodFVuaXQ6IDAsXG4gICAgbWF4SGVpZ2h0OiAwLFxuICAgIHBvc2l0aW9uTGVmdFVuaXQ6IDAsXG4gICAgcG9zaXRpb25MZWZ0OiAwLFxuICAgIHBvc2l0aW9uVG9wVW5pdDogMCxcbiAgICBwb3NpdGlvblRvcDogMCxcbiAgICBwb3NpdGlvblJpZ2h0VW5pdDogMCxcbiAgICBwb3NpdGlvblJpZ2h0OiAwLFxuICAgIHBvc2l0aW9uQm90dG9tVW5pdDogMCxcbiAgICBwb3NpdGlvbkJvdHRvbTogMCxcbiAgICBtYXJnaW5MZWZ0VW5pdDogMCxcbiAgICBtYXJnaW5MZWZ0OiAwLFxuICAgIG1hcmdpblRvcFVuaXQ6IDAsXG4gICAgbWFyZ2luVG9wOiAwLFxuICAgIG1hcmdpblJpZ2h0VW5pdDogMCxcbiAgICBtYXJnaW5SaWdodDogMCxcbiAgICBtYXJnaW5Cb3R0b21Vbml0OiAwLFxuICAgIG1hcmdpbkJvdHRvbTogMCxcbiAgICBwYWRkaW5nTGVmdFVuaXQ6IDAsXG4gICAgcGFkZGluZ0xlZnQ6IDAsXG4gICAgcGFkZGluZ1RvcFVuaXQ6IDAsXG4gICAgcGFkZGluZ1RvcDogMCxcbiAgICBwYWRkaW5nUmlnaHRVbml0OiAwLFxuICAgIHBhZGRpbmdSaWdodDogMCxcbiAgICBwYWRkaW5nQm90dG9tVW5pdDogMCxcbiAgICBwYWRkaW5nQm90dG9tOiAwLFxuICAgIGJvcmRlckxlZnQ6IDAsXG4gICAgYm9yZGVyVG9wOiAwLFxuICAgIGJvcmRlclJpZ2h0OiAwLFxuICAgIGJvcmRlckJvdHRvbTogMFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVWlUcmFuc2Zvcm0gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlVpVHJhbnNmb3JtLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucGFyZW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDYzMikuaW50MzIobWVzc2FnZS5wYXJlbnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJpZ2h0T2YgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjQwKS5pbnQzMihtZXNzYWdlLnJpZ2h0T2YpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uVHlwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25Db250ZW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLmFsaWduQ29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxpZ25JdGVtcyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS5hbGlnbkl0ZW1zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGlnblNlbGYgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmludDMyKG1lc3NhZ2UuYWxpZ25TZWxmKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4RGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLmZsZXhEaXJlY3Rpb24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhXcmFwICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5pbnQzMihtZXNzYWdlLmZsZXhXcmFwKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5qdXN0aWZ5Q29udGVudCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1NikuaW50MzIobWVzc2FnZS5qdXN0aWZ5Q29udGVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3ZlcmZsb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjQpLmludDMyKG1lc3NhZ2Uub3ZlcmZsb3cpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3BsYXkgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UuZGlzcGxheSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLmRpcmVjdGlvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5mbGV4KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXNVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwNCkuaW50MzIobWVzc2FnZS5mbGV4QmFzaXNVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4QmFzaXMgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLmZsZXhCYXNpcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleEdyb3cgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmZsZXhHcm93KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4U2hyaW5rICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzMykuZmxvYXQobWVzc2FnZS5mbGV4U2hyaW5rKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5pbnQzMihtZXNzYWdlLndpZHRoVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2lkdGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE1MikuaW50MzIobWVzc2FnZS5oZWlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY1KS5mbG9hdChtZXNzYWdlLmhlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluV2lkdGhVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2OCkuaW50MzIobWVzc2FnZS5taW5XaWR0aFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1pbldpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4MSkuZmxvYXQobWVzc2FnZS5taW5XaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxODQpLmludDMyKG1lc3NhZ2UubWluSGVpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluSGVpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE5NykuZmxvYXQobWVzc2FnZS5taW5IZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heFdpZHRoVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNDgpLmludDMyKG1lc3NhZ2UubWF4V2lkdGhVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhXaWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNjEpLmZsb2F0KG1lc3NhZ2UubWF4V2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjY0KS5pbnQzMihtZXNzYWdlLm1heEhlaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heEhlaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNzcpLmZsb2F0KG1lc3NhZ2UubWF4SGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDMyOCkuaW50MzIobWVzc2FnZS5wb3NpdGlvbkxlZnRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQxKS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Ub3BVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0NCkuaW50MzIobWVzc2FnZS5wb3NpdGlvblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM1NykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzYwKS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvblJpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3MykuZmxvYXQobWVzc2FnZS5wb3NpdGlvblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkJvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzc2KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uQm90dG9tVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzg5KS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5MZWZ0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MDgpLmludDMyKG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDIxKS5mbG9hdChtZXNzYWdlLm1hcmdpbkxlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDI0KS5pbnQzMihtZXNzYWdlLm1hcmdpblRvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblRvcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MzcpLmZsb2F0KG1lc3NhZ2UubWFyZ2luVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5SaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDQwKS5pbnQzMihtZXNzYWdlLm1hcmdpblJpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUzKS5mbG9hdChtZXNzYWdlLm1hcmdpblJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1NikuaW50MzIobWVzc2FnZS5tYXJnaW5Cb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5Cb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDY5KS5mbG9hdChtZXNzYWdlLm1hcmdpbkJvdHRvbSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0xlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4OCkuaW50MzIobWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUwMSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1RvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTA0KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdUb3BVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUxNykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDUyMCkuaW50MzIobWVzc2FnZS5wYWRkaW5nUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTMzKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdSaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0JvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTM2KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdCb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU0OSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJMZWZ0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU4MSkuZmxvYXQobWVzc2FnZS5ib3JkZXJMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJUb3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTk3KS5mbG9hdChtZXNzYWdlLmJvcmRlclRvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9yZGVyUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjEzKS5mbG9hdChtZXNzYWdlLmJvcmRlclJpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJCb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjI5KS5mbG9hdChtZXNzYWdlLmJvcmRlckJvdHRvbSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUcmFuc2Zvcm0oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgbWVzc2FnZS5wYXJlbnQgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODA6XG4gICAgICAgICAgbWVzc2FnZS5yaWdodE9mID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblR5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbGlnbkNvbnRlbnQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5hbGlnbkl0ZW1zID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UuYWxpZ25TZWxmID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleERpcmVjdGlvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhXcmFwID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuanVzdGlmeUNvbnRlbnQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5vdmVyZmxvdyA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLmRpc3BsYXkgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLmZsZXggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4QmFzaXNVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhCYXNpcyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhHcm93ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleFNocmluayA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLndpZHRoVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIG1lc3NhZ2UuaGVpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2UubWluV2lkdGhVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBtZXNzYWdlLm1pbldpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIG1lc3NhZ2UubWluSGVpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS5taW5IZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgbWVzc2FnZS5tYXhXaWR0aFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIG1lc3NhZ2UubWF4V2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhIZWlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICBtZXNzYWdlLm1heEhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0MTpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQyOlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25MZWZ0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQzOlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Ub3BVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25SaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25SaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbkJvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1MTpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpbkxlZnRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1MjpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpbkxlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgbWVzc2FnZS5tYXJnaW5Ub3BVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NDpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblRvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NTpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblJpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTY6XG4gICAgICAgICAgbWVzc2FnZS5tYXJnaW5SaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NzpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpbkJvdHRvbVVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDYxOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdMZWZ0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDYzOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1RvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1RvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdSaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY2OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0JvdHRvbVVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlckxlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzQ6XG4gICAgICAgICAgbWVzc2FnZS5ib3JkZXJUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzY6XG4gICAgICAgICAgbWVzc2FnZS5ib3JkZXJSaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3ODpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlckJvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVWlUcmFuc2Zvcm0gfSBmcm9tICcuL3BiL1VpVHJhbnNmb3JtLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNTBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFVpVHJhbnNmb3JtU2NoZW1hOiBJU2NoZW1hPFBCVWlUcmFuc2Zvcm0+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVWlUcmFuc2Zvcm0sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlVpVHJhbnNmb3JtLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlVpVHJhbnNmb3JtIHtcbiAgICByZXR1cm4gUEJVaVRyYW5zZm9ybS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlVpVHJhbnNmb3JtLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJWaXNpYmlsaXR5Q29tcG9uZW50KCk6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gIHJldHVybiB7IHZpc2libGU6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVmlzaWJpbGl0eUNvbXBvbmVudCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJWaXNpYmlsaXR5Q29tcG9uZW50KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlZpc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICcuL3BiL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYTogSVNjaGVtYTxQQlZpc2liaWxpdHlDb21wb25lbnQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVmlzaWJpbGl0eUNvbXBvbmVudC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICByZXR1cm4gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IElFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmUvdHlwZXMnXG5pbXBvcnQgKiBhcyBUcmFuc2Zvcm1TY2hlbWEgZnJvbSAnLi4vbGVnYWN5L1RyYW5zZm9ybSdcbmltcG9ydCAqIGFzIEFuaW1hdG9yU2NoZW1hIGZyb20gJy4vQW5pbWF0b3IuZ2VuJ1xuaW1wb3J0ICogYXMgQXVkaW9Tb3VyY2VTY2hlbWEgZnJvbSAnLi9BdWRpb1NvdXJjZS5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJBdHRhY2hTY2hlbWEgZnJvbSAnLi9BdmF0YXJBdHRhY2guZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIGZyb20gJy4vQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhclNoYXBlU2NoZW1hIGZyb20gJy4vQXZhdGFyU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgQmlsbGJvYXJkU2NoZW1hIGZyb20gJy4vQmlsbGJvYXJkLmdlbidcbmltcG9ydCAqIGFzIEJveFNoYXBlU2NoZW1hIGZyb20gJy4vQm94U2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgQ2FtZXJhTW9kZVNjaGVtYSBmcm9tICcuL0NhbWVyYU1vZGUuZ2VuJ1xuaW1wb3J0ICogYXMgQ2FtZXJhTW9kZUFyZWFTY2hlbWEgZnJvbSAnLi9DYW1lcmFNb2RlQXJlYS5nZW4nXG5pbXBvcnQgKiBhcyBDeWxpbmRlclNoYXBlU2NoZW1hIGZyb20gJy4vQ3lsaW5kZXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBHTFRGU2hhcGVTY2hlbWEgZnJvbSAnLi9HTFRGU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgTWF0ZXJpYWxTY2hlbWEgZnJvbSAnLi9NYXRlcmlhbC5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoQ29sbGlkZXJTY2hlbWEgZnJvbSAnLi9NZXNoQ29sbGlkZXIuZ2VuJ1xuaW1wb3J0ICogYXMgTWVzaFJlbmRlcmVyU2NoZW1hIGZyb20gJy4vTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCAqIGFzIE5GVFNoYXBlU2NoZW1hIGZyb20gJy4vTkZUU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyRG93blNjaGVtYSBmcm9tICcuL09uUG9pbnRlckRvd24uZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSBmcm9tICcuL09uUG9pbnRlckRvd25SZXN1bHQuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyVXBTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJVcC5nZW4nXG5pbXBvcnQgKiBhcyBPblBvaW50ZXJVcFJlc3VsdFNjaGVtYSBmcm9tICcuL09uUG9pbnRlclVwUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIFBsYW5lU2hhcGVTY2hlbWEgZnJvbSAnLi9QbGFuZVNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFBvaW50ZXJFdmVudHNTY2hlbWEgZnJvbSAnLi9Qb2ludGVyRXZlbnRzLmdlbidcbmltcG9ydCAqIGFzIFBvaW50ZXJFdmVudHNSZXN1bHRTY2hlbWEgZnJvbSAnLi9Qb2ludGVyRXZlbnRzUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIFBvaW50ZXJMb2NrU2NoZW1hIGZyb20gJy4vUG9pbnRlckxvY2suZ2VuJ1xuaW1wb3J0ICogYXMgUmF5Y2FzdFNjaGVtYSBmcm9tICcuL1JheWNhc3QuZ2VuJ1xuaW1wb3J0ICogYXMgUmF5Y2FzdFJlc3VsdFNjaGVtYSBmcm9tICcuL1JheWNhc3RSZXN1bHQuZ2VuJ1xuaW1wb3J0ICogYXMgU3BoZXJlU2hhcGVTY2hlbWEgZnJvbSAnLi9TcGhlcmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBUZXh0U2hhcGVTY2hlbWEgZnJvbSAnLi9UZXh0U2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVWlUZXh0U2NoZW1hIGZyb20gJy4vVWlUZXh0LmdlbidcbmltcG9ydCAqIGFzIFVpVHJhbnNmb3JtU2NoZW1hIGZyb20gJy4vVWlUcmFuc2Zvcm0uZ2VuJ1xuaW1wb3J0ICogYXMgVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYSBmcm9tICcuL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTGlicmFyeUNvbXBvbmVudHMoe1xuICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hXG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hJz4pIHtcbiAgcmV0dXJuIHtcblx0XHRBbmltYXRvcjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBbmltYXRvclNjaGVtYS5BbmltYXRvclNjaGVtYSwgQW5pbWF0b3JTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdWRpb1NvdXJjZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdWRpb1NvdXJjZVNjaGVtYS5BdWRpb1NvdXJjZVNjaGVtYSwgQXVkaW9Tb3VyY2VTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJBdHRhY2g6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyQXR0YWNoU2NoZW1hLkF2YXRhckF0dGFjaFNjaGVtYSwgQXZhdGFyQXR0YWNoU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyTW9kaWZpZXJBcmVhOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYS5BdmF0YXJNb2RpZmllckFyZWFTY2hlbWEsIEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhclNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF2YXRhclNoYXBlU2NoZW1hLkF2YXRhclNoYXBlU2NoZW1hLCBBdmF0YXJTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEJpbGxib2FyZDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShCaWxsYm9hcmRTY2hlbWEuQmlsbGJvYXJkU2NoZW1hLCBCaWxsYm9hcmRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRCb3hTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShCb3hTaGFwZVNjaGVtYS5Cb3hTaGFwZVNjaGVtYSwgQm94U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRDYW1lcmFNb2RlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKENhbWVyYU1vZGVTY2hlbWEuQ2FtZXJhTW9kZVNjaGVtYSwgQ2FtZXJhTW9kZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdENhbWVyYU1vZGVBcmVhOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKENhbWVyYU1vZGVBcmVhU2NoZW1hLkNhbWVyYU1vZGVBcmVhU2NoZW1hLCBDYW1lcmFNb2RlQXJlYVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEN5bGluZGVyU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ3lsaW5kZXJTaGFwZVNjaGVtYS5DeWxpbmRlclNoYXBlU2NoZW1hLCBDeWxpbmRlclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0R0xURlNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEdMVEZTaGFwZVNjaGVtYS5HTFRGU2hhcGVTY2hlbWEsIEdMVEZTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE1hdGVyaWFsOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1hdGVyaWFsU2NoZW1hLk1hdGVyaWFsU2NoZW1hLCBNYXRlcmlhbFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE1lc2hDb2xsaWRlcjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShNZXNoQ29sbGlkZXJTY2hlbWEuTWVzaENvbGxpZGVyU2NoZW1hLCBNZXNoQ29sbGlkZXJTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRNZXNoUmVuZGVyZXI6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWVzaFJlbmRlcmVyU2NoZW1hLk1lc2hSZW5kZXJlclNjaGVtYSwgTWVzaFJlbmRlcmVyU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TkZUU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTkZUU2hhcGVTY2hlbWEuTkZUU2hhcGVTY2hlbWEsIE5GVFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyRG93bjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShPblBvaW50ZXJEb3duU2NoZW1hLk9uUG9pbnRlckRvd25TY2hlbWEsIE9uUG9pbnRlckRvd25TY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJEb3duUmVzdWx0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSwgT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlclVwOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlclVwU2NoZW1hLk9uUG9pbnRlclVwU2NoZW1hLCBPblBvaW50ZXJVcFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlclVwUmVzdWx0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLCBPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFBsYW5lU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoUGxhbmVTaGFwZVNjaGVtYS5QbGFuZVNoYXBlU2NoZW1hLCBQbGFuZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UG9pbnRlckV2ZW50czogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQb2ludGVyRXZlbnRzU2NoZW1hLlBvaW50ZXJFdmVudHNTY2hlbWEsIFBvaW50ZXJFdmVudHNTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQb2ludGVyRXZlbnRzUmVzdWx0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBvaW50ZXJFdmVudHNSZXN1bHRTY2hlbWEuUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYSwgUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFBvaW50ZXJMb2NrOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBvaW50ZXJMb2NrU2NoZW1hLlBvaW50ZXJMb2NrU2NoZW1hLCBQb2ludGVyTG9ja1NjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFJheWNhc3Q6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoUmF5Y2FzdFNjaGVtYS5SYXljYXN0U2NoZW1hLCBSYXljYXN0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UmF5Y2FzdFJlc3VsdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShSYXljYXN0UmVzdWx0U2NoZW1hLlJheWNhc3RSZXN1bHRTY2hlbWEsIFJheWNhc3RSZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRTcGhlcmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSwgU3BoZXJlU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRUZXh0U2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVGV4dFNoYXBlU2NoZW1hLlRleHRTaGFwZVNjaGVtYSwgVGV4dFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VWlUZXh0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFVpVGV4dFNjaGVtYS5VaVRleHRTY2hlbWEsIFVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFVpVHJhbnNmb3JtOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFVpVHJhbnNmb3JtU2NoZW1hLlVpVHJhbnNmb3JtU2NoZW1hLCBVaVRyYW5zZm9ybVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFZpc2liaWxpdHlDb21wb25lbnQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5WaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLCBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLkNPTVBPTkVOVF9JRCksXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiwgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDFcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybVR5cGUgPSB7XG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyOyB3OiBudW1iZXIgfVxuICBzY2FsZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH1cbiAgcGFyZW50PzogRW50aXR5XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fTEVOR1RIID0gNDRcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybVNjaGVtYTogSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBUcmFuc2Zvcm1UeXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHRyID0gYnVpbGRlci5pbmNyZW1lbnRXcml0ZU9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIsIHZhbHVlLnBvc2l0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDQsIHZhbHVlLnBvc2l0aW9uLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDgsIHZhbHVlLnBvc2l0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDEyLCB2YWx1ZS5yb3RhdGlvbi54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAxNiwgdmFsdWUucm90YXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjAsIHZhbHVlLnJvdGF0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI0LCB2YWx1ZS5yb3RhdGlvbi53KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyOCwgdmFsdWUuc2NhbGUueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzIsIHZhbHVlLnNjYWxlLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDM2LCB2YWx1ZS5zY2FsZS56KVxuICAgIGJ1aWxkZXIuc2V0VWludDMyKHB0ciArIDQwLCB2YWx1ZS5wYXJlbnQgfHwgMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgY29uc3QgcHRyID0gcmVhZGVyLmluY3JlbWVudFJlYWRPZmZzZXQoVFJBTlNGT1JNX0xFTkdUSClcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyKSxcbiAgICAgICAgeTogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgNCksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDgpXG4gICAgICB9LFxuICAgICAgcm90YXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMTIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxNiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDIwKSxcbiAgICAgICAgdzogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjQpXG4gICAgICB9LFxuICAgICAgc2NhbGU6IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjgpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAzMiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDM2KVxuICAgICAgfSxcbiAgICAgIHBhcmVudDogcmVhZGVyLmdldFVpbnQzMihwdHIgKyA0MCkgYXMgRW50aXR5XG4gICAgfVxuICB9LFxuICBjcmVhdGUoKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSxcbiAgICAgIHNjYWxlOiB7IHg6IDEsIHk6IDEsIHo6IDEgfSxcbiAgICAgIHJvdGF0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KHtcbiAgZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYVxufTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSc+KTogQ29tcG9uZW50RGVmaW5pdGlvbjxcbiAgSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPixcbiAgUGFydGlhbDxUcmFuc2Zvcm1UeXBlPlxuPiB7XG4gIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFRyYW5zZm9ybVNjaGVtYSwgQ09NUE9ORU5UX0lEKVxufVxuIiwiaW1wb3J0IHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcblxuaW1wb3J0IHsgZGVmaW5lTGlicmFyeUNvbXBvbmVudHMgfSBmcm9tICcuL2dlbmVyYXRlZC9pbmRleC5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoUmVuZGVyZXJTY2hlbWEgZnJvbSAnLi9nZW5lcmF0ZWQvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IFBCTWVzaFJlbmRlcmVyIH0gZnJvbSAnLi9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbGVnYWN5L1RyYW5zZm9ybSdcblxuZXhwb3J0IGVudW0gQ09NUE9ORU5UX0lEIHtcbiAgU1lOQyA9IDEwMDBcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFNka0NvbXBvbmVudHMgPSBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVTZGtDb21wb25lbnRzPlxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmU6IFByZUVuZ2luZSkge1xuICBjb25zdCBhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyA9IGRlZmluZUxpYnJhcnlDb21wb25lbnRzKGVuZ2luZSlcbiAgZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24oYXV0b2dlbmVyYXRlZENvbXBvbmVudHMuTWVzaFJlbmRlcmVyLl9pZClcbiAgcmV0dXJuIHtcbiAgICAuLi5hdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyxcbiAgICBUcmFuc2Zvcm06IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudChlbmdpbmUpLFxuICAgIE1lc2hSZW5kZXJlcjogZW5naW5lLmRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgICBJU2NoZW1hPFBCTWVzaFJlbmRlcmVyPixcbiAgICAgIFBhcnRpYWw8UEJNZXNoUmVuZGVyZXI+XG4gICAgPihNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJQXJyYXk8VD4odHlwZTogSVNjaGVtYTxUPik6IElTY2hlbWE8QXJyYXk8VD4+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IEFycmF5PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBidWlsZGVyLndyaXRlVWludDMyKHZhbHVlLmxlbmd0aClcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICB0eXBlLnNlcmlhbGl6ZShpdGVtLCBidWlsZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogQXJyYXk8VD4ge1xuICAgICAgY29uc3QgbmV3QXJyYXk6IEFycmF5PFQ+ID0gW11cbiAgICAgIGNvbnN0IGxlbmd0aCA9IHJlYWRlci5yZWFkVWludDMyKClcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaCh0eXBlLmRlc2VyaWFsaXplKHJlYWRlcikpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyYXlcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEJvb2w6IElTY2hlbWE8Ym9vbGVhbj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogYm9vbGVhbiwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQ4KHZhbHVlID8gMSA6IDApXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDgoKSA9PT0gMVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJRW51bTxUPih0eXBlOiBJU2NoZW1hPGFueT4pOiBJU2NoZW1hPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IFQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIHR5cGUuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB7XG4gICAgICByZXR1cm4gdHlwZS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDMyKClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQ2NCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDY0KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDY0OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDY0KEJpZ0ludCh2YWx1ZSkpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihyZWFkZXIucmVhZEludDY0KCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MzIodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDE2OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDE2KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDE2KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQ4OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxhdFN0cmluZzogSVNjaGVtYTxzdHJpbmc+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IHN0cmluZywgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHJlYWRlci5yZWFkQnVmZmVyKCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVjc1N0cmluZyA9IEZsYXRTdHJpbmdcbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuaW1wb3J0IHsgVG9PcHRpb25hbCB9IGZyb20gJy4vdHlwaW5nJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogSVNjaGVtYVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQgZXh0ZW5kcyBTcGVjPiA9IFRvT3B0aW9uYWw8e1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIElTY2hlbWFcbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZGVzZXJpYWxpemUnXT5cbiAgICA6IFRbS10gZXh0ZW5kcyBTcGVjXG4gICAgPyBSZXN1bHQ8VFtLXT5cbiAgICA6IG5ldmVyXG59PlxuXG5leHBvcnQgdHlwZSBNYXBTY2hlbWFUeXBlPFQgZXh0ZW5kcyBTcGVjPiA9IElTY2hlbWE8UmVzdWx0PFQ+PlxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElNYXA8VCBleHRlbmRzIFNwZWM+KHNwZWM6IFQpOiBJU2NoZW1hPFJlc3VsdDxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogUmVzdWx0PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICBzcGVjW2tleV0uc2VyaWFsaXplKCh2YWx1ZSBhcyBhbnkpW2tleV0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBSZXN1bHQ8VD4ge1xuICAgICAgY29uc3QgbmV3VmFsdWU6IFJlc3VsdDxUPiA9IHt9IGFzIGFueVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlYykge1xuICAgICAgICAvLyBUT0RPOiBhcyBhbnlcbiAgICAgICAgOyhuZXdWYWx1ZSBhcyBhbnkpW2tleV0gPSBzcGVjW2tleV0uZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5jcmVhdGUoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJT3B0aW9uYWw8VD4oc3BlYzogSVNjaGVtYTxUPik6IElTY2hlbWE8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJ1aWxkZXIud3JpdGVJbnQ4KDEpXG4gICAgICAgIHNwZWMuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMClcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFQgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgZXhpc3RzID0gcmVhZGVyLnJlYWRJbnQ4KClcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUFycmF5IH0gZnJvbSAnLi9BcnJheSdcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuL2Jhc2ljL0Jvb2xlYW4nXG5pbXBvcnQgeyBJRW51bSB9IGZyb20gJy4vYmFzaWMvRW51bSdcbmltcG9ydCB7IEZsb2F0MzIsIEZsb2F0NjQgfSBmcm9tICcuL2Jhc2ljL0Zsb2F0J1xuaW1wb3J0IHsgSW50MTYsIEludDMyLCBJbnQ4LCBJbnQ2NCBhcyBpSW50NjQgfSBmcm9tICcuL2Jhc2ljL0ludGVnZXInXG5pbXBvcnQgeyBFY3NTdHJpbmcgfSBmcm9tICcuL2Jhc2ljL1N0cmluZydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBJTWFwIH0gZnJvbSAnLi9NYXAnXG5pbXBvcnQgeyBJT3B0aW9uYWwgfSBmcm9tICcuL09wdGlvbmFsJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBTY2hlbWFzIHtcbiAgZXhwb3J0IHR5cGUgU2NoZW1hVHlwZSA9IElTY2hlbWFcblxuICBleHBvcnQgY29uc3QgQm9vbGVhbiA9IEJvb2xcblxuICBleHBvcnQgY29uc3QgU3RyaW5nID0gRWNzU3RyaW5nXG5cbiAgZXhwb3J0IGNvbnN0IEZsb2F0ID0gRmxvYXQzMlxuICBleHBvcnQgY29uc3QgRG91YmxlID0gRmxvYXQ2NFxuXG4gIGV4cG9ydCBjb25zdCBCeXRlID0gSW50OFxuICBleHBvcnQgY29uc3QgU2hvcnQgPSBJbnQxNlxuICBleHBvcnQgY29uc3QgSW50ID0gSW50MzJcbiAgZXhwb3J0IGNvbnN0IEludDY0ID0gaUludDY0XG5cbiAgZXhwb3J0IGNvbnN0IE51bWJlciA9IEZsb2F0MzJcblxuICBleHBvcnQgY29uc3QgRW51bSA9IElFbnVtXG4gIGV4cG9ydCBjb25zdCBBcnJheSA9IElBcnJheVxuICBleHBvcnQgY29uc3QgTWFwID0gSU1hcFxuICBleHBvcnQgY29uc3QgT3B0aW9uYWwgPSBJT3B0aW9uYWxcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pYTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12ZEhsd1pYTXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nVTNSeWRXTjBJRzltSUhSb1pTQnRaWE56WVdkbElIUm9ZWFFuY3lCaVpXbHVaeUIwY21GdWMyWmxjbVZrSUdKbGRIZGxaVzRnWTJ4cFpXNTBjeTVjYmlBcUlFQndkV0pzYVdOY2JpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1RXVnpjMkZuWlR4VUlEMGdkVzVyYm05M2JqNGdQU0I3WEc0Z0lHdGxlVEU2SUc1MWJXSmxjbHh1SUNCclpYa3lPaUJ1ZFcxaVpYSmNiaUFnZEdsdFpYTjBZVzF3T2lCdWRXMWlaWEpjYmlBZ1pHRjBZVG9nVkNCOElHNTFiR3hjYm4xY2JseHVMeW9xWEc0Z0tpQlFZWGxzYjJGa0lIUm9ZWFFnYVhSeklHSmxhVzVuSUhOMGIzSmxaQ0JwYmlCMGFHVWdjM1JoZEdVdVhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRkJoZVd4dllXUThWQ0E5SUhWdWEyNXZkMjQrSUQwZ2UxeHVJQ0IwYVcxbGMzUmhiWEE2SUc1MWJXSmxjbHh1SUNCa1lYUmhPaUJVSUh3Z2JuVnNiRnh1ZlZ4dVhHNHZLaXBjYmlBcUlFeHZZMkZzSUhOMFlYUmxYRzRnS2lCQWNIVmliR2xqWEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZOMFlYUmxQRlFnUFNCMWJtdHViM2R1UGlBOUlFMWhjRHh1ZFcxaVpYSXNJRTFoY0R4dWRXMWlaWElzSUZCaGVXeHZZV1E4VkQ0Z2ZDQnVkV3hzUGo1Y2JseHVMeW9xWEc0Z0tpQkRVa1JVSUhKbGRIVnliaUIwZVhCbFhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRU5TUkZROFZDQTlJSFZ1YTI1dmQyNCtJRDBnZTF4dUlDQmpjbVZoZEdWRmRtVnVkQ2hyWlhreE9pQnVkVzFpWlhJc0lHdGxlVEk2SUc1MWJXSmxjaXdnWkdGMFlUb2dWQ0I4SUc1MWJHd3BPaUJOWlhOellXZGxQRlErWEc0Z0lIQnliMk5sYzNOTlpYTnpZV2RsS0cxbGMzTmhaMlU2SUUxbGMzTmhaMlU4VkQ0cE9pQk5aWE56WVdkbFBGUStYRzRnSUdkbGRGTjBZWFJsS0NrNklGTjBZWFJsUEZRK1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmNyZHRQcm90b2NvbCA9IGV4cG9ydHMuc3RhdGVJdGVyYXRvciA9IGV4cG9ydHMuc2FtZURhdGEgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xuY29uc3QgZ2xvYmFsQnVmZmVyID0gZ2xvYmFsVGhpcy5CdWZmZXI7XG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2FtZURhdGEoYSwgYikge1xuICAgIC8vIEF0IHJlZmVyZW5jZSBsZXZlbFxuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChnbG9iYWxCdWZmZXIpIHtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBnbG9iYWxCdWZmZXIgJiYgYiBpbnN0YW5jZW9mIGdsb2JhbEJ1ZmZlcikge1xuICAgICAgICAgICAgLy8gRGVlcCBsZXZlbFxuICAgICAgICAgICAgcmV0dXJuIGEuZXF1YWxzKGIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2FtZURhdGEgPSBzYW1lRGF0YTtcbi8qKlxuICogU3RhdGUgaXRlcmF0b3JcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiogc3RhdGVJdGVyYXRvcihzdGF0ZSkge1xuICAgIGZvciAoY29uc3QgW2tleTEsIHZhbHVlMV0gb2Ygc3RhdGUuZW50cmllcygpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleTIsIHZhbHVlMl0gb2YgdmFsdWUxLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgeWllbGQgW2tleTEsIGtleTIsIHZhbHVlMl07XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnRzLnN0YXRlSXRlcmF0b3IgPSBzdGF0ZUl0ZXJhdG9yO1xuLyoqXG4gKiBAcHVibGljXG4gKiBDUkRUIHByb3RvY29sLlxuICogU3RvcmVzIHRoZSBsYXRlc3Qgc3RhdGUsIGFuZCBkZWNpZGVzIHdoZW5ldmVyIHdlIGhhdmVcbiAqIHRvIHByb2Nlc3MgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBpbiBjYXNlIGl0cyBhbiB1cGRhdGUsIG9yXG4gKiB0byBkaXNjYXJkIGFuZCBzZW5kIG91ciBsb2NhbCB2YWx1ZSBjYXVzZSByZW1vdGUgaXQncyBvdXRkYXRlZC5cbiAqL1xuZnVuY3Rpb24gY3JkdFByb3RvY29sKCkge1xuICAgIC8qKlxuICAgICAqIExvY2FsIHN0YXRlIHdoZXJlIHdlIHN0b3JlIHRoZSBsYXRlc3QgbGFtcG9ydCB0aW1lc3RhbXBcbiAgICAgKiBhbmQgdGhlIHJhdyBkYXRhIHZhbHVlXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogV2Ugc2hvdWxkIGNhbGwgdGhpcyBmbiBpbiBvcmRlciB0byB1cGRhdGUgdGhlIHN0YXRlXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZnVuY3Rpb24gdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgcmVtb3RlVGltZXN0YW1wKSB7XG4gICAgICAgIGNvbnN0IGtleTFWYWx1ZSA9IHN0YXRlLmdldChrZXkxKTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC5tYXgocmVtb3RlVGltZXN0YW1wLCBrZXkxVmFsdWU/LmdldChrZXkyKT8udGltZXN0YW1wIHx8IDApO1xuICAgICAgICBpZiAoa2V5MVZhbHVlKSB7XG4gICAgICAgICAgICBrZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3S2V5MVZhbHVlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgbmV3S2V5MVZhbHVlLnNldChrZXkyLCB7IHRpbWVzdGFtcCwgZGF0YSB9KTtcbiAgICAgICAgICAgIHN0YXRlLnNldChrZXkxLCBuZXdLZXkxVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHRpbWVzdGFtcCwgZGF0YSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gZXZlbnQgZm9yIHRoZSBzcGVjaWZpZWQga2V5IGFuZCBzdG9yZSB0aGUgbmV3IGRhdGEgYW5kXG4gICAgICogbGFtcG9ydCB0aW1lc3RtYXAgaW5jcmVtZW50ZWQgYnkgb25lIGluIHRoZSBzdGF0ZS5cbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXZlbnQoa2V5MSwga2V5MiwgZGF0YSkge1xuICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIHRpbWVzdGFtcFxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSAoc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5Mik/LnRpbWVzdGFtcCB8fCAwKSArIDE7XG4gICAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCk7XG4gICAgICAgIHJldHVybiB7IGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSByZWNlaXZlZCBtZXNzYWdlIG9ubHkgaWYgdGhlIGxhbXBvcnQgbnVtYmVyIHJlY2lldmVkIGlzIGhpZ2hlclxuICAgICAqIHRoYW4gdGhlIHN0b3JlZCBvbmUuIElmIGl0cyBsb3dlciwgd2Ugc3ByZWFkIGl0IHRvIHRoZSBuZXR3b3JrIHRvIGNvcnJlY3QgdGhlIHBlZXIuXG4gICAgICogSWYgdGhleSBhcmUgZXF1YWwsIHRoZSBiaWdnZXIgcmF3IGRhdGEgd2lucy5cbiAgXG4gICAgICogUmV0dXJucyB0aGUgcmVjaWV2ZWQgZGF0YSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgd2FzIGJpZ2dlciB0aGFuIG91cnMuXG4gICAgICogSWYgaXQgd2FzIGFuIG91dGRhdGVkIG1lc3NhZ2UsIHRoZW4gd2UgcmV0dXJuIHZvaWRcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2UobWVzc2FnZSkge1xuICAgICAgICBjb25zdCB7IGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCB9ID0gbWVzc2FnZTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHN0YXRlLmdldChrZXkxKT8uZ2V0KGtleTIpO1xuICAgICAgICAvLyBUaGUgcmVjZWl2ZWQgbWVzc2FnZSBpcyA+IHRoYW4gb3VyIGN1cnJlbnQgdmFsdWUsIHVwZGF0ZSBvdXIgc3RhdGUuXG4gICAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50LnRpbWVzdGFtcCA8IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKTtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE91dGRhdGVkIE1lc3NhZ2UuIFJlc2VuZCBvdXIgc3RhdGUgbWVzc2FnZSB0aHJvdWdoIHRoZSB3aXJlLlxuICAgICAgICBpZiAoY3VycmVudC50aW1lc3RhbXAgPiB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5MSxcbiAgICAgICAgICAgICAgICBrZXkyLFxuICAgICAgICAgICAgICAgIGRhdGE6IGN1cnJlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGN1cnJlbnQudGltZXN0YW1wXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNhbWUgZGF0YSwgc2FtZSB0aW1lc3RhbXAuIFdlaXJkbyBlY2hvIG1lc3NhZ2UuXG4gICAgICAgIGlmIChzYW1lRGF0YShjdXJyZW50LmRhdGEsIGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSYWNlIGNvbmRpdGlvbiwgc2FtZSB0aW1lc3RhbXAgZGlmZiBkYXRhLlxuICAgICAgICBmdW5jdGlvbiBjb21wYXJlRGF0YShjdXJyZW50LCBkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudCA+IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbXBhcmVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAga2V5MSxcbiAgICAgICAgICAgICAgICBrZXkyLFxuICAgICAgICAgICAgICAgIGRhdGE6IGN1cnJlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IGN1cnJlbnQudGltZXN0YW1wXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVN0YXRlKGtleTEsIGtleTIsIGRhdGEsIHRpbWVzdGFtcCkuZGF0YTtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGVcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlRXZlbnQsXG4gICAgICAgIHByb2Nlc3NNZXNzYWdlLFxuICAgICAgICBnZXRTdGF0ZVxuICAgIH07XG59XG5leHBvcnRzLmNyZHRQcm90b2NvbCA9IGNyZHRQcm90b2NvbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTl6Y21NdmFXNWtaWGd1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3T3pzN096dEJRVU5CTERCRFFVRjFRanRCUVVWMlFpeE5RVUZOTEZsQlFWa3NSMEZCU1N4VlFVRnJRaXhEUVVGRExFMUJRVTBzUTBGQlFUdEJRVVV2UXpzN08wZEJSMGM3UVVGRFNDeFRRVUZuUWl4UlFVRlJMRU5CUVVrc1EwRkJTU3hGUVVGRkxFTkJRVWs3U1VGRGNFTXNjVUpCUVhGQ08wbEJRM0pDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlFUdEpRVVY0UWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hWUVVGVkxFbEJRVWtzUTBGQlF5eFpRVUZaTEZWQlFWVXNSVUZCUlR0UlFVTjBSQ3hKUVVGSkxFTkJRVU1zUTBGQlF5eFZRVUZWTEV0QlFVc3NRMEZCUXl4RFFVRkRMRlZCUVZVc1JVRkJSVHRaUVVOcVF5eFBRVUZQTEV0QlFVc3NRMEZCUVR0VFFVTmlPMUZCUlVRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEY2tNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU5xUWl4UFFVRlBMRXRCUVVzc1EwRkJRVHRoUVVOaU8xTkJRMFk3VVVGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUVR0TFFVTmFPMGxCUlVRc1NVRkJTU3haUVVGWkxFVkJRVVU3VVVGRGFFSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1dVRkJXU3hKUVVGSkxFTkJRVU1zV1VGQldTeFpRVUZaTEVWQlFVVTdXVUZETVVRc1lVRkJZVHRaUVVOaUxFOUJRVkVzUTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRVHRUUVVNMVFqdExRVU5HTzBsQlJVUXNUMEZCVHl4TFFVRkxMRU5CUVVFN1FVRkRaQ3hEUVVGRE8wRkJla0pFTERSQ1FYbENRenRCUVVWRU96czdSMEZIUnp0QlFVTklMRkZCUVdVc1EwRkJReXhEUVVGRExHRkJRV0VzUTBGRE5VSXNTMEZCWlR0SlFVVm1MRXRCUVVzc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVU3VVVGRE5VTXNTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSVHRaUVVNM1F5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlFUdFRRVU16UWp0TFFVTkdPMEZCUTBnc1EwRkJRenRCUVZKRUxITkRRVkZETzBGQlJVUTdPenM3T3p0SFFVMUhPMEZCUTBnc1UwRkJaMElzV1VGQldUdEpRVWN4UWpzN096dFBRVWxITzBsQlEwZ3NUVUZCVFN4TFFVRkxMRWRCUVdFc1NVRkJTU3hIUVVGSExFVkJRVVVzUTBGQlFUdEpRVVZxUXpzN08wOUJSMGM3U1VGRFNDeFRRVUZUTEZkQlFWY3NRMEZEYkVJc1NVRkJXU3hGUVVOYUxFbEJRVmtzUlVGRFdpeEpRVUZqTEVWQlEyUXNaVUZCZFVJN1VVRkZka0lzVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlFUdFJRVU5xUXl4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVU40UWl4bFFVRmxMRVZCUTJZc1UwRkJVeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4VFFVRlRMRWxCUVVrc1EwRkJReXhEUVVOeVF5eERRVUZCTzFGQlEwUXNTVUZCU1N4VFFVRlRMRVZCUVVVN1dVRkRZaXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZCTzFOQlEzcERPMkZCUVUwN1dVRkRUQ3hOUVVGTkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkJPMWxCUXpsQ0xGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1UwRkJVeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVRTdXVUZETTBNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVFN1UwRkRPVUk3VVVGRFJDeFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGQk8wbEJRelZDTEVOQlFVTTdTVUZGUkRzN096dFBRVWxITzBsQlEwZ3NVMEZCVXl4WFFVRlhMRU5CUVVNc1NVRkJXU3hGUVVGRkxFbEJRVmtzUlVGQlJTeEpRVUZqTzFGQlF6ZEVMREJDUVVFd1FqdFJRVU14UWl4TlFVRk5MRk5CUVZNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVUU3VVVGRGJFVXNWMEZCVnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkJPMUZCUlhoRExFOUJRVThzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVExFVkJRVVVzUTBGQlFUdEpRVU40UXl4RFFVRkRPMGxCUlVRN096czdPenM3TzA5QlVVYzdTVUZEU0N4VFFVRlRMR05CUVdNc1EwRkJReXhQUVVGdFFqdFJRVU42UXl4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1QwRkJUeXhEUVVGQk8xRkJReTlETEUxQlFVMHNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGQk8xRkJSVEZETEhORlFVRnpSVHRSUVVOMFJTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhUUVVGVExFZEJRVWNzVTBGQlV5eEZRVUZGTzFsQlF6ZERMRmRCUVZjc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRVHRaUVVONFF5eFBRVUZQTEU5QlFVOHNRMEZCUVR0VFFVTm1PMUZCUlVRc0swUkJRU3RFTzFGQlF5OUVMRWxCUVVrc1QwRkJUeXhEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVWQlFVVTdXVUZEYWtNc1QwRkJUenRuUWtGRFRDeEpRVUZKTzJkQ1FVTktMRWxCUVVrN1owSkJRMG9zU1VGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpPMmRDUVVOc1FpeFRRVUZUTEVWQlFVVXNUMEZCVHl4RFFVRkRMRk5CUVZNN1lVRkROMElzUTBGQlFUdFRRVU5HTzFGQlJVUXNhMFJCUVd0RU8xRkJRMnhFTEVsQlFVa3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVTdXVUZEYUVNc1QwRkJUeXhQUVVGUExFTkJRVUU3VTBGRFpqdFJRVVZFTERSRFFVRTBRenRSUVVNMVF5eFRRVUZUTEZkQlFWY3NRMEZCUXl4UFFVRnBRaXhGUVVGRkxFbEJRV003V1VGRGNFUXNUMEZCVHl4UFFVRlJMRWRCUVVjc1NVRkJTeXhEUVVGQk8xRkJRM3BDTEVOQlFVTTdVVUZGUkN4SlFVRkpMRmRCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZPMWxCUTI1RExFOUJRVTg3WjBKQlEwd3NTVUZCU1R0blFrRkRTaXhKUVVGSk8yZENRVU5LTEVsQlFVa3NSVUZCUlN4UFFVRlBMRU5CUVVNc1NVRkJTVHRuUWtGRGJFSXNVMEZCVXl4RlFVRkZMRTlCUVU4c1EwRkJReXhUUVVGVE8yRkJRemRDTEVOQlFVRTdVMEZEUmp0UlFVTkVMRmRCUVZjc1EwRkJReXhKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVUU3VVVGRE4wTXNUMEZCVHl4UFFVRlBMRU5CUVVFN1NVRkRhRUlzUTBGQlF6dEpRVVZFT3pzN1QwRkhSenRKUVVOSUxGTkJRVk1zVVVGQlVUdFJRVU5tTEU5QlFVOHNTMEZCU3l4RFFVRkJPMGxCUTJRc1EwRkJRenRKUVVWRUxFOUJRVTg3VVVGRFRDeFhRVUZYTzFGQlExZ3NZMEZCWXp0UlFVTmtMRkZCUVZFN1MwRkRWQ3hEUVVGQk8wRkJRMGdzUTBGQlF6dEJRV2hJUkN4dlEwRm5TRU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCRFVrUlVMQ0JOWlhOellXZGxMQ0JRWVhsc2IyRmtMQ0JUZEdGMFpTQjlJR1p5YjIwZ0p5NHZkSGx3WlhNblhHNWxlSEJ2Y25RZ0tpQm1jbTl0SUNjdUwzUjVjR1Z6SjF4dVhHNWpiMjV6ZENCbmJHOWlZV3hDZFdabVpYSWdQU0FvWjJ4dlltRnNWR2hwY3lCaGN5QmhibmtwTGtKMVptWmxjbHh1WEc0dktpcGNiaUFxSUVOdmJYQmhjbVVnY21GM0lHUmhkR0V1WEc0Z0tpQkFhVzUwWlhKdVlXeGNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhOaGJXVkVZWFJoUEZRK0tHRTZJRlFzSUdJNklGUXBPaUJpYjI5c1pXRnVJSHRjYmlBZ0x5OGdRWFFnY21WbVpYSmxibU5sSUd4bGRtVnNYRzRnSUdsbUlDaGhJRDA5UFNCaUtTQnlaWFIxY200Z2RISjFaVnh1WEc0Z0lHbG1JQ2hoSUdsdWMzUmhibU5sYjJZZ1ZXbHVkRGhCY25KaGVTQW1KaUJpSUdsdWMzUmhibU5sYjJZZ1ZXbHVkRGhCY25KaGVTa2dlMXh1SUNBZ0lHbG1JQ2hoTG1KNWRHVk1aVzVuZEdnZ0lUMDlJR0l1WW5sMFpVeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmhMbUo1ZEdWTVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0dGYmFWMGdJVDA5SUdKYmFWMHBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObFhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQjBjblZsWEc0Z0lIMWNibHh1SUNCcFppQW9aMnh2WW1Gc1FuVm1abVZ5S1NCN1hHNGdJQ0FnYVdZZ0tHRWdhVzV6ZEdGdVkyVnZaaUJuYkc5aVlXeENkV1ptWlhJZ0ppWWdZaUJwYm5OMFlXNWpaVzltSUdkc2IySmhiRUoxWm1abGNpa2dlMXh1SUNBZ0lDQWdMeThnUkdWbGNDQnNaWFpsYkZ4dUlDQWdJQ0FnY21WMGRYSnVJQ2hoSUdGeklHRnVlU2t1WlhGMVlXeHpLR0lwWEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnY21WMGRYSnVJR1poYkhObFhHNTlYRzVjYmk4cUtseHVJQ29nVTNSaGRHVWdhWFJsY21GMGIzSmNiaUFxSUVCcGJuUmxjbTVoYkZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNHFJSE4wWVhSbFNYUmxjbUYwYjNJOFZENG9YRzRnSUhOMFlYUmxPaUJUZEdGMFpUeFVQbHh1S1RvZ1NYUmxjbUZpYkdWSmRHVnlZWFJ2Y2p4YmJuVnRZbVZ5TENCdWRXMWlaWElzSUZCaGVXeHZZV1E4VkQ0Z2ZDQnVkV3hzWFQ0Z2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0clpYa3hMQ0IyWVd4MVpURmRJRzltSUhOMFlYUmxMbVZ1ZEhKcFpYTW9LU2tnZTF4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnVzJ0bGVUSXNJSFpoYkhWbE1sMGdiMllnZG1Gc2RXVXhMbVZ1ZEhKcFpYTW9LU2tnZTF4dUlDQWdJQ0FnZVdsbGJHUWdXMnRsZVRFc0lHdGxlVElzSUhaaGJIVmxNbDFjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBY0hWaWJHbGpYRzRnS2lCRFVrUlVJSEJ5YjNSdlkyOXNMbHh1SUNvZ1UzUnZjbVZ6SUhSb1pTQnNZWFJsYzNRZ2MzUmhkR1VzSUdGdVpDQmtaV05wWkdWeklIZG9aVzVsZG1WeUlIZGxJR2hoZG1WY2JpQXFJSFJ2SUhCeWIyTmxjM01nWVc1a0lITjBiM0psSUhSb1pTQnVaWGNnWkdGMFlTQnBiaUJqWVhObElHbDBjeUJoYmlCMWNHUmhkR1VzSUc5eVhHNGdLaUIwYnlCa2FYTmpZWEprSUdGdVpDQnpaVzVrSUc5MWNpQnNiMk5oYkNCMllXeDFaU0JqWVhWelpTQnlaVzF2ZEdVZ2FYUW5jeUJ2ZFhSa1lYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTnlaSFJRY205MGIyTnZiRHhjYmlBZ1ZDQmxlSFJsYm1SeklHNTFiV0psY2lCOElGVnBiblE0UVhKeVlYa2dmQ0J6ZEhKcGJtZGNiajRvS1RvZ1ExSkVWRHhVUGlCN1hHNGdJQzhxS2x4dUlDQWdLaUJNYjJOaGJDQnpkR0YwWlNCM2FHVnlaU0IzWlNCemRHOXlaU0IwYUdVZ2JHRjBaWE4wSUd4aGJYQnZjblFnZEdsdFpYTjBZVzF3WEc0Z0lDQXFJR0Z1WkNCMGFHVWdjbUYzSUdSaGRHRWdkbUZzZFdWY2JpQWdJQ29nUUdsdWRHVnlibUZzWEc0Z0lDQXFMMXh1SUNCamIyNXpkQ0J6ZEdGMFpUb2dVM1JoZEdVOFZENGdQU0J1WlhjZ1RXRndLQ2xjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWMlVnYzJodmRXeGtJR05oYkd3Z2RHaHBjeUJtYmlCcGJpQnZjbVJsY2lCMGJ5QjFjR1JoZEdVZ2RHaGxJSE4wWVhSbFhHNGdJQ0FxSUVCcGJuUmxjbTVoYkZ4dUlDQWdLaTljYmlBZ1puVnVZM1JwYjI0Z2RYQmtZWFJsVTNSaGRHVW9YRzRnSUNBZ2EyVjVNVG9nYm5WdFltVnlMRnh1SUNBZ0lHdGxlVEk2SUc1MWJXSmxjaXhjYmlBZ0lDQmtZWFJoT2lCVUlId2diblZzYkN4Y2JpQWdJQ0J5WlcxdmRHVlVhVzFsYzNSaGJYQTZJRzUxYldKbGNseHVJQ0FwT2lCUVlYbHNiMkZrUEZRK0lIdGNiaUFnSUNCamIyNXpkQ0JyWlhreFZtRnNkV1VnUFNCemRHRjBaUzVuWlhRb2EyVjVNU2xjYmlBZ0lDQmpiMjV6ZENCMGFXMWxjM1JoYlhBZ1BTQk5ZWFJvTG0xaGVDaGNiaUFnSUNBZ0lISmxiVzkwWlZScGJXVnpkR0Z0Y0N4Y2JpQWdJQ0FnSUd0bGVURldZV3gxWlQ4dVoyVjBLR3RsZVRJcFB5NTBhVzFsYzNSaGJYQWdmSHdnTUZ4dUlDQWdJQ2xjYmlBZ0lDQnBaaUFvYTJWNU1WWmhiSFZsS1NCN1hHNGdJQ0FnSUNCclpYa3hWbUZzZFdVdWMyVjBLR3RsZVRJc0lIc2dkR2x0WlhOMFlXMXdMQ0JrWVhSaElIMHBYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRzVsZDB0bGVURldZV3gxWlNBOUlHNWxkeUJOWVhBb0tWeHVJQ0FnSUNBZ2JtVjNTMlY1TVZaaGJIVmxMbk5sZENoclpYa3lMQ0I3SUhScGJXVnpkR0Z0Y0N3Z1pHRjBZU0I5S1Z4dUlDQWdJQ0FnYzNSaGRHVXVjMlYwS0d0bGVURXNJRzVsZDB0bGVURldZV3gxWlNsY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIc2dkR2x0WlhOMFlXMXdMQ0JrWVhSaElIMWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJEY21WaGRHVWdZVzRnWlhabGJuUWdabTl5SUhSb1pTQnpjR1ZqYVdacFpXUWdhMlY1SUdGdVpDQnpkRzl5WlNCMGFHVWdibVYzSUdSaGRHRWdZVzVrWEc0Z0lDQXFJR3hoYlhCdmNuUWdkR2x0WlhOMGJXRndJR2x1WTNKbGJXVnVkR1ZrSUdKNUlHOXVaU0JwYmlCMGFHVWdjM1JoZEdVdVhHNGdJQ0FxSUVCd2RXSnNhV05jYmlBZ0lDb3ZYRzRnSUdaMWJtTjBhVzl1SUdOeVpXRjBaVVYyWlc1MEtHdGxlVEU2SUc1MWJXSmxjaXdnYTJWNU1qb2diblZ0WW1WeUxDQmtZWFJoT2lCVUlId2diblZzYkNrNklFMWxjM05oWjJVOFZENGdlMXh1SUNBZ0lDOHZJRWx1WTNKbGJXVnVkQ0IwYUdVZ2RHbHRaWE4wWVcxd1hHNGdJQ0FnWTI5dWMzUWdkR2x0WlhOMFlXMXdJRDBnS0hOMFlYUmxMbWRsZENoclpYa3hLVDh1WjJWMEtHdGxlVElwUHk1MGFXMWxjM1JoYlhBZ2ZId2dNQ2tnS3lBeFhHNGdJQ0FnZFhCa1lYUmxVM1JoZEdVb2EyVjVNU3dnYTJWNU1pd2daR0YwWVN3Z2RHbHRaWE4wWVcxd0tWeHVYRzRnSUNBZ2NtVjBkWEp1SUhzZ2EyVjVNU3dnYTJWNU1pd2daR0YwWVN3Z2RHbHRaWE4wWVcxd0lIMWNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJRY205alpYTnpJSFJvWlNCeVpXTmxhWFpsWkNCdFpYTnpZV2RsSUc5dWJIa2dhV1lnZEdobElHeGhiWEJ2Y25RZ2JuVnRZbVZ5SUhKbFkybGxkbVZrSUdseklHaHBaMmhsY2x4dUlDQWdLaUIwYUdGdUlIUm9aU0J6ZEc5eVpXUWdiMjVsTGlCSlppQnBkSE1nYkc5M1pYSXNJSGRsSUhOd2NtVmhaQ0JwZENCMGJ5QjBhR1VnYm1WMGQyOXlheUIwYnlCamIzSnlaV04wSUhSb1pTQndaV1Z5TGx4dUlDQWdLaUJKWmlCMGFHVjVJR0Z5WlNCbGNYVmhiQ3dnZEdobElHSnBaMmRsY2lCeVlYY2daR0YwWVNCM2FXNXpMbHh1WEc0Z0lDQXFJRkpsZEhWeWJuTWdkR2hsSUhKbFkybGxkbVZrSUdSaGRHRWdhV1lnZEdobElHeGhiWEJ2Y25RZ2JuVnRZbVZ5SUhkaGN5QmlhV2RuWlhJZ2RHaGhiaUJ2ZFhKekxseHVJQ0FnS2lCSlppQnBkQ0IzWVhNZ1lXNGdiM1YwWkdGMFpXUWdiV1Z6YzJGblpTd2dkR2hsYmlCM1pTQnlaWFIxY200Z2RtOXBaRnh1SUNBZ0tpQkFjSFZpYkdsalhHNGdJQ0FxTDF4dUlDQm1kVzVqZEdsdmJpQndjbTlqWlhOelRXVnpjMkZuWlNodFpYTnpZV2RsT2lCTlpYTnpZV2RsUEZRK0tUb2dUV1Z6YzJGblpUeFVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QnJaWGt4TENCclpYa3lMQ0JrWVhSaExDQjBhVzFsYzNSaGJYQWdmU0E5SUcxbGMzTmhaMlZjYmlBZ0lDQmpiMjV6ZENCamRYSnlaVzUwSUQwZ2MzUmhkR1V1WjJWMEtHdGxlVEVwUHk1blpYUW9hMlY1TWlsY2JseHVJQ0FnSUM4dklGUm9aU0J5WldObGFYWmxaQ0J0WlhOellXZGxJR2x6SUQ0Z2RHaGhiaUJ2ZFhJZ1kzVnljbVZ1ZENCMllXeDFaU3dnZFhCa1lYUmxJRzkxY2lCemRHRjBaUzVjYmlBZ0lDQnBaaUFvSVdOMWNuSmxiblFnZkh3Z1kzVnljbVZ1ZEM1MGFXMWxjM1JoYlhBZ1BDQjBhVzFsYzNSaGJYQXBJSHRjYmlBZ0lDQWdJSFZ3WkdGMFpWTjBZWFJsS0d0bGVURXNJR3RsZVRJc0lHUmhkR0VzSUhScGJXVnpkR0Z0Y0NsY2JpQWdJQ0FnSUhKbGRIVnliaUJ0WlhOellXZGxYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdUM1YwWkdGMFpXUWdUV1Z6YzJGblpTNGdVbVZ6Wlc1a0lHOTFjaUJ6ZEdGMFpTQnRaWE56WVdkbElIUm9jbTkxWjJnZ2RHaGxJSGRwY21VdVhHNGdJQ0FnYVdZZ0tHTjFjbkpsYm5RdWRHbHRaWE4wWVcxd0lENGdkR2x0WlhOMFlXMXdLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0JyWlhreExGeHVJQ0FnSUNBZ0lDQnJaWGt5TEZ4dUlDQWdJQ0FnSUNCa1lYUmhPaUJqZFhKeVpXNTBMbVJoZEdFc1hHNGdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dZM1Z5Y21WdWRDNTBhVzFsYzNSaGJYQmNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlRZVzFsSUdSaGRHRXNJSE5oYldVZ2RHbHRaWE4wWVcxd0xpQlhaV2x5Wkc4Z1pXTm9ieUJ0WlhOellXZGxMbHh1SUNBZ0lHbG1JQ2h6WVcxbFJHRjBZU2hqZFhKeVpXNTBMbVJoZEdFc0lHUmhkR0VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYldWemMyRm5aVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRkpoWTJVZ1kyOXVaR2wwYVc5dUxDQnpZVzFsSUhScGJXVnpkR0Z0Y0NCa2FXWm1JR1JoZEdFdVhHNGdJQ0FnWm5WdVkzUnBiMjRnWTI5dGNHRnlaVVJoZEdFb1kzVnljbVZ1ZERvZ1ZDQjhJRzUxYkd3c0lHUmhkR0U2SUZRZ2ZDQnVkV3hzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWTNWeWNtVnVkQ0VnUGlCa1lYUmhJVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hqYjIxd1lYSmxSR0YwWVNoamRYSnlaVzUwTG1SaGRHRXNJR1JoZEdFcEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnJaWGt4TEZ4dUlDQWdJQ0FnSUNCclpYa3lMRnh1SUNBZ0lDQWdJQ0JrWVhSaE9pQmpkWEp5Wlc1MExtUmhkR0VzWEc0Z0lDQWdJQ0FnSUhScGJXVnpkR0Z0Y0RvZ1kzVnljbVZ1ZEM1MGFXMWxjM1JoYlhCY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdkWEJrWVhSbFUzUmhkR1VvYTJWNU1Td2dhMlY1TWl3Z1pHRjBZU3dnZEdsdFpYTjBZVzF3S1M1a1lYUmhYRzRnSUNBZ2NtVjBkWEp1SUcxbGMzTmhaMlZjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUhSb1pTQmpkWEp5Wlc1MElITjBZWFJsWEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvdlhHNGdJR1oxYm1OMGFXOXVJR2RsZEZOMFlYUmxLQ2s2SUZOMFlYUmxQRlErSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjM1JoZEdWY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnWTNKbFlYUmxSWFpsYm5Rc1hHNGdJQ0FnY0hKdlkyVnpjMDFsYzNOaFoyVXNYRzRnSUNBZ1oyVjBVM1JoZEdWY2JpQWdmVnh1ZlZ4dUlsMTkiLCIvKipcbiAqIFRha2UgdGhlIG1heCBiZXR3ZWVuIGN1cnJlbnRTaXplIGFuZCBpbnRlbmRlZFNpemUgYW5kIHRoZW4gcGx1cyAxMDI0LiBUaGVuLFxuICogIGZpbmQgdGhlIG5leHQgbmVhcmVyIG11bHRpcGxlIG9mIDEwMjQuXG4gKiBAcGFyYW0gY3VycmVudFNpemUgLSBudW1iZXJcbiAqIEBwYXJhbSBpbnRlbmRlZFNpemUgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSBjYWxjdWxhdGVkIG51bWJlclxuICovXG5mdW5jdGlvbiBnZXROZXh0U2l6ZShjdXJyZW50U2l6ZTogbnVtYmVyLCBpbnRlbmRlZFNpemU6IG51bWJlcikge1xuICBjb25zdCBtaW5OZXdTaXplID0gTWF0aC5tYXgoY3VycmVudFNpemUsIGludGVuZGVkU2l6ZSkgKyAxMDI0XG4gIHJldHVybiBNYXRoLmNlaWwobWluTmV3U2l6ZSAvIDEwMjQpICogMTAyNFxufVxuXG4vKipcbiAqIEBwYXJhbSB3cml0aW5nIC0gd3JpdGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gcmVhZGluZyAtIHJlYWRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSAtIEluaXRpYWwgY2FwYWNpdHkgb2YgYnVmZmVyIHRvIGFsbG9jYXRlLCBpZ25vcmVkIGlmIHlvdSB1c2Ugd3JpdGluZyBvciByZWFkaW5nIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gcmVhZCBmcm9tIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHdoZXJlIGJlZ2lucyB0byByZWFkLiBEZWZhdWx0IDBcbiAgICogQHBhcmFtIGxlbmd0aCAtIGRlbGltaXRlIHdoZXJlIHRoZSB2YWxpZCBkYXRhIGVuZHMuIERlZmF1bHQ6IGJ1ZmZlci5sZW5ndGhcbiAgICovXG4gIHJlYWRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgbGVuZ3RoPzogbnVtYmVyXG4gICAgY3VycmVudE9mZnNldDogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHdyaXRlIHRoZXJlLlxuICAgKiBAcGFyYW0gY3VycmVudE9mZnNldCAtIHNldCB0aGUgY3Vyc29yIHRvIG5vdCBzdGFydCB3cml0aW5nIGZyb20gdGhlIGJlZ2luIG9mIGl0LiBEZWZhdWx0IDBcbiAgICovXG4gIHdyaXRpbmc/OiB7XG4gICAgYnVmZmVyOiBVaW50OEFycmF5XG4gICAgY3VycmVudE9mZnNldD86IG51bWJlclxuICB9XG5cbiAgaW5pdGlhbENhcGFjaXR5PzogbnVtYmVyXG59XG5cbmNvbnN0IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHkgPSAxMDI0MFxuXG4vKipcbiAqIEJ5dGVCdWZmZXIgaXMgYSB3cmFwcGVyIG9mIERhdGFWaWV3IHdoaWNoIGFsc28gYWRkcyBhIHJlYWQgYW5kIHdyaXRlIG9mZnNldC5cbiAqICBBbHNvIGluIGEgd3JpdGUgb3BlcmF0aW9uIGl0IHJlc2l6ZXMgdGhlIGJ1ZmZlciBpcyBiZWluZyB1c2VkIGlmIGl0IG5lZWRzLlxuICpcbiAqIC0gVXNlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG9yIGNvbnN1bWUgZGF0YS5cbiAqIC0gVXNlIHNldCBhbmQgZ2V0IG9ubHkgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91J3JlIGRvaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQnl0ZUJ1ZmZlcihvcHRpb25zOiBDcmVhdGVCeXRlQnVmZmVyT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGluaXRpYWxST2Zmc2V0OiBudW1iZXIgPSBvcHRpb25zLnJlYWRpbmc/LmN1cnJlbnRPZmZzZXQgfHwgMFxuICBsZXQgaW5pdGlhbEJ1ZmZlcjogVWludDhBcnJheSB8IG51bGwgPSBudWxsXG4gIGxldCBpbml0aWFsV09mZnNldDogbnVtYmVyID0gMFxuXG4gIGlmIChvcHRpb25zLndyaXRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy53cml0aW5nLmJ1ZmZlclxuICAgIGlmIChvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldCkge1xuICAgICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLndyaXRpbmcuY3VycmVudE9mZnNldFxuICAgIH1cbiAgfSBlbHNlIGlmIChvcHRpb25zLnJlYWRpbmcpIHtcbiAgICBpbml0aWFsQnVmZmVyID0gb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlclxuICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy5yZWFkaW5nLmxlbmd0aCB8fCBvcHRpb25zLnJlYWRpbmcuYnVmZmVyLmxlbmd0aFxuICB9IGVsc2Uge1xuICAgIGluaXRpYWxCdWZmZXIgPSBuZXcgVWludDhBcnJheShcbiAgICAgIG9wdGlvbnMuaW5pdGlhbENhcGFjaXR5IHx8IGRlZmF1bHRJbml0aWFsQ2FwYWNpdHlcbiAgICApXG4gIH1cblxuICBsZXQgYnVmZmVyOiBVaW50OEFycmF5ID0gaW5pdGlhbEJ1ZmZlciFcbiAgbGV0IHZpZXc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIsIGJ1ZmZlci5ieXRlT2Zmc2V0KVxuICBsZXQgd29mZnNldDogbnVtYmVyID0gaW5pdGlhbFdPZmZzZXRcbiAgbGV0IHJvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxST2Zmc2V0XG5cbiAgLyoqXG4gICAqIEluY3JlZW1lbnQgdGhlIHdyaXRlIG9mZnNldCBhbmQgcmVzaXplIHRoZSBidWZmZXIgaWYgaXQgbmVlZHMuXG4gICAqL1xuICBjb25zdCB3b0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmICh3b2Zmc2V0ICsgYW1vdW50ID4gYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld3NpemUgPSBnZXROZXh0U2l6ZShidWZmZXIuYnl0ZUxlbmd0aCwgd29mZnNldCArIGFtb3VudClcbiAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IG5ldyBVaW50OEFycmF5KG5ld3NpemUpXG4gICAgICBuZXdCdWZmZXIuc2V0KGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IG5ld0J1ZmZlclxuICAgICAgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyKVxuICAgIH1cblxuICAgIHdvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHdvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHJlYWQgb2Zmc2V0IGFuZCB0aHJvdyBhbiBlcnJvciBpZiBpdCdzIHRyeWluZyB0byByZWFkXG4gICAqICBvdXRzaWRlIHRoZSBib3VuZHMuXG4gICAqL1xuICBjb25zdCByb0FkZCA9IChhbW91bnQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChyb2Zmc2V0ICsgYW1vdW50ID4gd29mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdXRzaWRlIG9mIHRoZSBib3VuZHMgb2Ygd3JpdGVuIGRhdGEuJylcbiAgICB9XG5cbiAgICByb2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiByb2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBlbnRpcmUgY3VycmVudCBVaW50OEFycmF5LlxuICAgICAqXG4gICAgICogV0FSTklORzogaWYgdGhlIGJ1ZmZlciBncm93cywgdGhlIHZpZXcgaGFkIGNoYW5nZWQgaXRzZWxmLFxuICAgICAqICBhbmQgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIGEgaW52YWxpZCBvbmUuXG4gICAgICovXG4gICAgYnVmZmVyKCk6IFVpbnQ4QXJyYXkge1xuICAgICAgcmV0dXJuIGJ1ZmZlclxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGNhcGFjaXR5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlclxuICAgICAqL1xuICAgIGJ1ZmZlckxlbmd0aCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5sZW5ndGhcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBieXRlQnVmZmVyIHRvIGF2b2lkIGNyZWF0aW5nIGEgbmV3IG9uZVxuICAgICAqL1xuICAgIHJlc2V0QnVmZmVyKCk6IHZvaWQge1xuICAgICAgcm9mZnNldCA9IDBcbiAgICAgIHdvZmZzZXQgPSAwXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCByZWFkIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRSZWFkT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgd3JpdGUgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFdyaXRlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVhZGluZyBwdXJwb3NlXG4gICAgICogUmV0dXJucyB0aGUgcHJldml1b3Mgb2Zmc3NldCBzaXplIGJlZm9yZSBpbmNyZW1lbnRpbmdcbiAgICAgKi9cbiAgICBpbmNyZW1lbnRSZWFkT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBIb3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIHJlYWQuXG4gICAgICovXG4gICAgcmVtYWluaW5nQnl0ZXMoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0IC0gcm9mZnNldFxuICAgIH0sXG4gICAgcmVhZEZsb2F0MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkRmxvYXQ2NCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZEludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRJbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkSW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ0ludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ4KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihyb0FkZCgyKSlcbiAgICB9LFxuICAgIHJlYWRVaW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRVaW50NjQoKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRCdWZmZXIoKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmdldFVpbnQzMihyb0FkZCg0KSlcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkocm9BZGQobGVuZ3RoKSwgcm9BZGQoMCkpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBXcml0aW5nIHB1cnBvc2VcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnQgb2Zmc2V0XG4gICAgICogQHBhcmFtIGFtb3VudCAtIGhvdyBtYW55IGJ5dGVzXG4gICAgICogQHJldHVybnMgVGhlIG9mZnNldCB3aGVuIHRoaXMgcmVzZXJ2aW5nIHN0YXJ0cy5cbiAgICAgKi9cbiAgICBpbmNyZW1lbnRXcml0ZU9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0ZW4gaW4gdGhlIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBzaXplKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGFrZSBjYXJlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGlmIHlvdSBtb2RpZnkgdGhlIGRhdGEgYWZ0ZXIsIHRoZVxuICAgICAqIHJldHVybmVkIHN1YmFycmF5IHdpbGwgY2hhbmdlIHRvby4gSWYgeW91J2xsIG1vZGlmeSB0aGUgY29udGVudCBvZiB0aGVcbiAgICAgKiBieXRlYnVmZmVyLCBtYXliZSB5b3Ugd2FudCB0byB1c2UgdG9Db3BpZWRCaW5hcnkoKVxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQgYXMgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHRvQmluYXJ5KCkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheSgwLCB3b2Zmc2V0KVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIGNvcGllZCBidWZmZXIgb2YgdGhlIGN1cnJlbnQgZGF0YSBvZiBCeXRlQnVmZmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViYXJyYXkgZnJvbSAwIHRvIG9mZnNldC5cbiAgICAgKi9cbiAgICB0b0NvcGllZEJpbmFyeSgpIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLnRvQmluYXJ5KCkpXG4gICAgfSxcblxuICAgIHdyaXRlQnVmZmVyKHZhbHVlOiBVaW50OEFycmF5LCB3cml0ZUxlbmd0aDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgIGlmICh3cml0ZUxlbmd0aCkge1xuICAgICAgICB0aGlzLndyaXRlVWludDMyKHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG8gPSB3b0FkZCh2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgYnVmZmVyLnNldCh2YWx1ZSwgbylcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0RmxvYXQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlRmxvYXQ2NCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50OCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMSlcbiAgICAgIHZpZXcuc2V0SW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldEludDE2KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0SW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDY0KHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldFVpbnQ4KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50MTYodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDIpXG4gICAgICB2aWV3LnNldFVpbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRVaW50MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnVWludDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgLy8gRGF0YXZpZXcgUHJveHlcbiAgICBnZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQxNihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50OChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50OChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDY0KG9mZnNldDogbnVtYmVyKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ1VpbnQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBzZXRGbG9hdDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0RmxvYXQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQ4KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ0ludDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50OChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDE2KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQxNihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQnl0ZUJ1ZmZlciA9IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUJ5dGVCdWZmZXI+XG4iLCIvKipcbiAqIFRoZSB3aXJlIG1lc3NhZ2UgaXMgdGhlIHRvcC1sZXZlbCBtZXNzYWdlIHRoYXQgY2FuIGJlIHBhY2tlZFxuICogIGluc2lkZSBpdCBjYW4gY29udGFpbiBhIGRhdGEgd2l0aCBhbm90aGVyIHN0cnVjdHVyZSBvciBwcm90b2NvbFxuICpcbiAqIEVhY2ggd2lyZSBtZXNzYWdlIGhhcyB0aHJlZSBwcmltaXRpdmUgcHJvcGVydHkgdGhhdCBpdCdsbCBuZXZlciBjaGFuZ2VcbiAqICAgLS0tPiBsZW5ndGggICAgICAgIHVpbnQzMiAobWVzc2FnZSBzaXplIHVwIHRvIDQsMjk0LDk2NywyOTUpXG4gKiAgIC0tLT4gdmVyc2lvbiAgICAgICB1aW50MzIgKGZvciBub3cganVzdCBhIG51bWJlciB3aGljaCBpcyB6ZXJvKVxuICogICAtLS0+IG1lc3NhZ2UgdHlwZSAgdWludDMyXG4gKiBUaGUgbGVuZ3RoIGluZGljYXRlcyBob3cgbWFueSBieXRlcyBhcmUgYWJvdmUgc2VsZiwgdGhlIHZlcnNpb24gaW5cbiAqIGNvbWJpbmF0aW9uIHdpdGggbWVzc2FnZSB0eXBlIGRlZmluZXMgdGhlIHNldCBvZiBoYW5kbGVycyB0aGF0IHdpbGwgYmVcbiAqIGF2YWlsYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlXG4gKlxuICovXG5cbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuL0J5dGVCdWZmZXInXG5cbnR5cGUgVWludDMyID0gbnVtYmVyXG5cbmV4cG9ydCBuYW1lc3BhY2UgV2lyZU1lc3NhZ2Uge1xuICBleHBvcnQgZW51bSBFbnVtIHtcbiAgICBSRVNFUlZFRCA9IDAsXG5cbiAgICAvLyBDb21wb25lbnQgT3BlcmF0aW9uXG4gICAgUFVUX0NPTVBPTkVOVCA9IDEsXG4gICAgREVMRVRFX0NPTVBPTkVOVCA9IDIsXG5cbiAgICBNQVhfTUVTU0FHRV9UWVBFXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGxlbmd0aCAtIFVpbnQzMiB0aGUgbGVuZ3RoIG9mIGFsbCBtZXNzYWdlIChpbmNsdWRpbmcgdGhlIGhlYWRlcilcbiAgICogQHBhcmFtIHR5cGUgLSBkZWZpbmUgdGhlIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgdGhlIGRhdGFcbiAgICovXG4gIGV4cG9ydCB0eXBlIEhlYWRlciA9IHtcbiAgICBsZW5ndGg6IFVpbnQzMlxuICAgIHR5cGU6IFVpbnQzMlxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IEhFQURFUl9MRU5HVEggPSA4XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpZiB0aGUgbWVzc2FnZSBpbmNvbWluZyBpcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIGJ1ZiAtIEJ5dGVCdWZmZXJcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZShidWY6IEJ5dGVCdWZmZXIpIHtcbiAgICBjb25zdCByZW0gPSBidWYucmVtYWluaW5nQnl0ZXMoKVxuICAgIGlmIChyZW0gPCBIRUFERVJfTEVOR1RIKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLmdldFVpbnQzMihidWYuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICBpZiAocmVtIDwgbWVzc2FnZUxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkSGVhZGVyKGJ1ZjogQnl0ZUJ1ZmZlcik6IEhlYWRlciB8IG51bGwge1xuICAgIGlmICghdmFsaWRhdGUoYnVmKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVuZ3RoOiBidWYucmVhZFVpbnQzMigpLFxuICAgICAgdHlwZTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnVtXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdpcmVNZXNzYWdlXG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZW5naW5lL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vQnl0ZUJ1ZmZlcidcbmltcG9ydCBXaXJlTWVzc2FnZSBmcm9tICcuLi93aXJlTWVzc2FnZSdcblxuZXhwb3J0IG5hbWVzcGFjZSBDb21wb25lbnRPcGVyYXRpb24ge1xuICAvKipcbiAgICogQHBhcmFtIGVudGl0eSAtIFVpbnQzMiBudW1iZXIgb2YgdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gY29tcG9uZW50SWQgLSBVaW50MzIgbnVtYmVyIG9mIGlkXG4gICAqIEBwYXJhbSB0aW1lc3RhbXAgLSBVaW50NjQgTGFtcG9ydCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIGRhdGEgLSBVaW50OFtdIGRhdGEgb2YgY29tcG9uZW50XG4gICAqL1xuICBleHBvcnQgdHlwZSBJUHV0Q29tcG9uZW50ID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YTogVWludDhBcnJheVxuICB9XG4gIGV4cG9ydCB0eXBlIElEZWxldGVDb21wb25lbnQgPSB7XG4gICAgZW50aXR5OiBFbnRpdHlcbiAgICBjb21wb25lbnRJZDogbnVtYmVyXG4gICAgdGltZXN0YW1wOiBudW1iZXJcbiAgICBkYXRhPzogdW5kZWZpbmVkXG4gIH1cblxuICBleHBvcnQgY29uc3QgTUVTU0FHRV9IRUFERVJfTEVOR1RIID0gMjBcbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiBmb3IgYW4gb3B0aW1hbCB3cml0aW5nIGRhdGEgcGFzc2luZyB0aGUgQnl0ZUJ1ZmZlclxuICAgKiAgYWxyZWFkeSBhbGxvY2F0ZWRcbiAgICovXG4gIGV4cG9ydCBmdW5jdGlvbiB3cml0ZShcbiAgICB0eXBlOiBXaXJlTWVzc2FnZS5FbnVtLFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgIGNvbXBvbmVudERlZmluaXRpb246IENvbXBvbmVudERlZmluaXRpb24sXG4gICAgYnVmOiBCeXRlQnVmZmVyXG4gICkge1xuICAgIC8vIHJlc2VydmUgdGhlIGJlZ2lubmluZ1xuICAgIGNvbnN0IHN0YXJ0TWVzc2FnZU9mZnNldCA9IGJ1Zi5pbmNyZW1lbnRXcml0ZU9mZnNldChcbiAgICAgIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEggKyBNRVNTQUdFX0hFQURFUl9MRU5HVEhcbiAgICApXG5cbiAgICAvLyB3cml0ZSBib2R5XG4gICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVCkge1xuICAgICAgY29tcG9uZW50RGVmaW5pdGlvbi53cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHksIGJ1ZilcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5zaXplKCkgLSBzdGFydE1lc3NhZ2VPZmZzZXRcblxuICAgIC8vIFdyaXRlIFdpcmVNZXNzYWdlIGhlYWRlclxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0LCBtZXNzYWdlTGVuZ3RoKVxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgNCwgdHlwZSlcblxuICAgIC8vIFdyaXRlIENvbXBvbmVudE9wZXJhdGlvbiBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDgsIGVudGl0eSlcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDEyLCBjb21wb25lbnREZWZpbml0aW9uLl9pZClcbiAgICBidWYuc2V0VWludDY0KHN0YXJ0TWVzc2FnZU9mZnNldCArIDE2LCBCaWdJbnQodGltZXN0YW1wKSlcbiAgICBidWYuc2V0VWludDMyKFxuICAgICAgc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMjQsXG4gICAgICBtZXNzYWdlTGVuZ3RoIC0gTUVTU0FHRV9IRUFERVJfTEVOR1RIIC0gV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSFxuICAgIClcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFkKFxuICAgIGJ1ZjogQnl0ZUJ1ZmZlclxuICApOiAoV2lyZU1lc3NhZ2UuSGVhZGVyICYgKElQdXRDb21wb25lbnQgfCBJRGVsZXRlQ29tcG9uZW50KSkgfCBudWxsIHtcbiAgICBjb25zdCBoZWFkZXIgPSBXaXJlTWVzc2FnZS5yZWFkSGVhZGVyKGJ1ZilcblxuICAgIGlmICghaGVhZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgIC4uLmhlYWRlcixcbiAgICAgIGVudGl0eTogYnVmLnJlYWRVaW50MzIoKSBhcyBFbnRpdHksXG4gICAgICBjb21wb25lbnRJZDogYnVmLnJlYWRJbnQzMigpLFxuICAgICAgdGltZXN0YW1wOiBOdW1iZXIoYnVmLnJlYWRVaW50NjQoKSlcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyLnR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgcmV0dXJuIGNvbW1vblxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb21tb24sXG4gICAgICBkYXRhOiBidWYucmVhZEJ1ZmZlcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBjcmR0UHJvdG9jb2wsIE1lc3NhZ2UgYXMgQ3JkdE1lc3NhZ2UgfSBmcm9tICdAZGNsL2NyZHQnXG5cbmltcG9ydCB0eXBlIHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnRPcGVyYXRpb24gYXMgTWVzc2FnZSB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24nXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi93aXJlTWVzc2FnZSdcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cy90eXBlcydcbmltcG9ydCB7IFJlY2VpdmVNZXNzYWdlLCBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZHRTY2VuZVN5c3RlbSh7XG4gIGVuZ2luZSxcbiAgdHJhbnNwb3J0c1xufToge1xuICBlbmdpbmU6IFByZUVuZ2luZVxuICB0cmFuc3BvcnRzOiBUcmFuc3BvcnRbXVxufSkge1xuICAvLyBDUkRUIENsaWVudFxuICBjb25zdCBjcmR0Q2xpZW50ID0gY3JkdFByb3RvY29sPFVpbnQ4QXJyYXk+KClcbiAgLy8gTWVzc2FnZXMgdGhhdCB3ZSByZWNlaXZlZCBhdCB0cmFuc3BvcnQub25NZXNzYWdlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2VkXG4gIGNvbnN0IHJlY2VpdmVkTWVzc2FnZXM6IFJlY2VpdmVNZXNzYWdlW10gPSBbXVxuICAvLyBNZXNzYWdlcyBhbHJlYWR5IHByb2Nlc3NlZCBieSB0aGUgZW5naW5lIGJ1dCB0aGF0IHdlIG5lZWQgdG8gYnJvYWRjYXN0IHRvIG90aGVyIHRyYW5zcG9ydHMuXG4gIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2VzOiBUcmFuc3BvcnRNZXNzYWdlW10gPSBbXVxuICAvLyBNYXAgb2YgZW50aXRpZXMgYWxyZWFkeSBwcm9jZXNzZWQgYXQgbGVhc3Qgb25jZVxuXG4gIHRyYW5zcG9ydHMuZm9yRWFjaChcbiAgICAodHJhbnNwb3J0KSA9PiAodHJhbnNwb3J0Lm9ubWVzc2FnZSA9IHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydC50eXBlKSlcbiAgKVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdHJhbnNwb3J0VHlwZSB0cmFucG9ydCBpZCB0byBpZGVudGl5IG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIGEgZnVuY3Rpb24gdG8gcHJvY2VzcyByZWNlaXZlZCBtZXNzYWdlc1xuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UodHJhbnNwb3J0VHlwZTogc3RyaW5nKSB7XG4gICAgLyoqXG4gICAgICogUmVjZWl2ZXMgYSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXMgYW5kIHN0b3JlcyBhbGwgdGhlIHZhbGlkXG4gICAgICogQ29tcG9uZW50IE9wZXJhdGlvbiBNZXNzYWdlcyBhdCBtZXNzYWdlcyBxdWV1ZVxuICAgICAqIEBwYXJhbSBjaHVua01lc3NhZ2UgQSBjaHVuayBvZiBiaW5hcnkgbWVzc2FnZXNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gcGFyc2VDaHVua01lc3NhZ2UoY2h1bmtNZXNzYWdlOiBVaW50OEFycmF5KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IGNodW5rTWVzc2FnZSwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICB9KVxuXG4gICAgICB3aGlsZSAoV2lyZU1lc3NhZ2UudmFsaWRhdGUoYnVmZmVyKSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5yZWFkKGJ1ZmZlcikhXG5cbiAgICAgICAgY29uc3QgeyB0eXBlLCBlbnRpdHksIGNvbXBvbmVudElkLCBkYXRhLCB0aW1lc3RhbXAgfSA9IG1lc3NhZ2VcbiAgICAgICAgcmVjZWl2ZWRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICB0cmFuc3BvcnRUeXBlLFxuICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgLmJ1ZmZlcigpXG4gICAgICAgICAgICAuc3ViYXJyYXkob2Zmc2V0LCBidWZmZXIuY3VycmVudFJlYWRPZmZzZXQoKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuZCBjbGVhciB0aGUgbWVzc2FlcyBxdWV1ZVxuICAgKiBAcmV0dXJucyBtZXNzYWdlcyByZWNpZXZlZCBieSB0aGUgdHJhbnNwb3J0IHRvIHByb2Nlc3Mgb24gdGhlIG5leHQgdGlja1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0TWVzc2FnZXM8VCA9IHVua25vd24+KHZhbHVlOiBUW10pIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IEFycmF5LmZyb20odmFsdWUpXG4gICAgdmFsdWUubGVuZ3RoID0gMFxuICAgIHJldHVybiBtZXNzYWdlc1RvUHJvY2Vzc1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZm4gd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgdGljay5cbiAgICogUHJvY2VzcyBhbGwgdGhlIG1lc3NhZ2VzIHF1ZXVlIHJlY2VpdmVkIGJ5IHRoZSB0cmFuc3BvcnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlY2VpdmVNZXNzYWdlcygpIHtcbiAgICBjb25zdCBtZXNzYWdlc1RvUHJvY2VzcyA9IGdldE1lc3NhZ2VzKHJlY2VpdmVkTWVzc2FnZXMpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXNUb1Byb2Nlc3MpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCB0aW1lc3RhbXAsIGNvbXBvbmVudElkLCBlbnRpdHksIHR5cGUgfSA9IG1lc3NhZ2VcbiAgICAgICAgY29uc3QgY3JkdE1lc3NhZ2U6IENyZHRNZXNzYWdlPFVpbnQ4QXJyYXk+ID0ge1xuICAgICAgICAgIGtleTE6IGVudGl0eSxcbiAgICAgICAgICBrZXkyOiBjb21wb25lbnRJZCxcbiAgICAgICAgICBkYXRhOiBkYXRhIHx8IG51bGwsXG4gICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBjdXJyZW50ID0gY3JkdENsaWVudC5wcm9jZXNzTWVzc2FnZShjcmR0TWVzc2FnZSlcblxuICAgICAgICAvLyBDUkRUIG91dGRhdGVkIG1lc3NhZ2UuIFJlc2VuZCB0aGlzIG1lc3NhZ2UgdGhyb3VnaCB0aGUgd2lyZVxuICAgICAgICBpZiAoY3JkdE1lc3NhZ2UgIT09IGN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgICA/IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVFxuICAgICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgICBNZXNzYWdlLndyaXRlKHR5cGUsIGVudGl0eSwgY3VycmVudC50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFByb2Nlc3MgQ1JEVCBNZXNzYWdlXG4gICAgICAgICAgaWYgKHR5cGUgPT09IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVCkge1xuICAgICAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0ge1xuICAgICAgICAgICAgICByZWFkaW5nOiB7IGJ1ZmZlcjogbWVzc2FnZS5kYXRhISwgY3VycmVudE9mZnNldDogMCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYiA9IGNyZWF0ZUJ5dGVCdWZmZXIob3B0cylcblxuICAgICAgICAgICAgLy8gVXBkYXRlIGVuZ2luZSBjb21wb25lbnRcbiAgICAgICAgICAgIGNvbXBvbmVudC51cHNlcnRGcm9tQmluYXJ5KG1lc3NhZ2UuZW50aXR5LCBiYilcbiAgICAgICAgICAgIGNvbXBvbmVudC5jbGVhckRpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gdHJhbnNwb3J0IHF1ZXVlIHRvIGJlIHByb2Nlc3NlZCBieSBvdGhlcnMgdHJhbnNwb3J0c1xuICAgICAgICAgIHRyYW5zcG9ydE1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZChidWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhlIGRpcnR5IG1hcCBhbmQgZ2VuZXJhdGVzIGNyZHQgbWVzc2FnZXMgdG8gYmUgc2VuZFxuICAgKiBAcGFyYW0gZGlydHlNYXAgYSBtYXAgb2YgeyBlbnRpdGllczogW2NvbXBvbmVudElkXSB9XG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVNZXNzYWdlcyhkaXJ0eU1hcDogTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KSB7XG4gICAgLy8gQ1JEVCBNZXNzYWdlcyB3aWxsIGJlIHRoZSBtZXJnZSBiZXR3ZWVuIHRoZSByZWNpZXZlZCB0cmFuc3BvcnQgbWVzc2FnZXMgYW5kIHRoZSBuZXcgY3JkdCBtZXNzYWdlc1xuICAgIGNvbnN0IGNyZHRNZXNzYWdlcyA9IGdldE1lc3NhZ2VzKHRyYW5zcG9ydE1lc3NhZ2VzKVxuICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRzSWRdIG9mIGRpcnR5TWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudElkIG9mIGNvbXBvbmVudHNJZCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50KGNvbXBvbmVudElkKVxuICAgICAgICBjb25zdCBlbnRpdHlDb21wb25lbnQgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICA/IGNvbXBvbmVudC50b0JpbmFyeShlbnRpdHkpLnRvQmluYXJ5KClcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgZXZlbnQgPSBjcmR0Q2xpZW50LmNyZWF0ZUV2ZW50KFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBlbnRpdHlDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBvZmZzZXQgPSBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgID8gV2lyZU1lc3NhZ2UuRW51bS5QVVRfQ09NUE9ORU5UXG4gICAgICAgICAgOiBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlRcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0TWVzc2FnZTogT21pdDxUcmFuc3BvcnRNZXNzYWdlLCAnbWVzc2FnZUJ1ZmZlcic+ID0ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRyYW5zcG9ydHMuc29tZSgodCkgPT4gdC5maWx0ZXIodHJhbnNwb3J0TWVzc2FnZSkpKSB7XG4gICAgICAgICAgTWVzc2FnZS53cml0ZSh0eXBlLCBlbnRpdHksIGV2ZW50LnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgICAgY3JkdE1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgICAgLi4udHJhbnNwb3J0TWVzc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXI6IGJ1ZmZlclxuICAgICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZW5kIG1lc3NhZ2VzIHRvIHRyYW5zcG9ydHNcbiAgICBjb25zdCB0cmFuc3BvcnRCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICBmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgICB0cmFuc3BvcnRCdWZmZXIucmVzZXRCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGNyZHRNZXNzYWdlcykge1xuICAgICAgICBpZiAodHJhbnNwb3J0LmZpbHRlcihtZXNzYWdlKSkge1xuICAgICAgICAgIHRyYW5zcG9ydEJ1ZmZlci53cml0ZUJ1ZmZlcihtZXNzYWdlLm1lc3NhZ2VCdWZmZXIsIGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0QnVmZmVyLnNpemUoKSkge1xuICAgICAgICB0cmFuc3BvcnQuc2VuZCh0cmFuc3BvcnRCdWZmZXIudG9CaW5hcnkoKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZU1lc3NhZ2VzLFxuICAgIHJlY2VpdmVNZXNzYWdlc1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi9jb21wb25lbnQnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlNYXA8SywgVj4gPSBSZWFkb25seU1hcDxcbiAgRGVlcFJlYWRvbmx5PEs+LFxuICBEZWVwUmVhZG9ubHk8Vj5cbj5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlTZXQ8VD4gPSBSZWFkb25seVNldDxEZWVwUmVhZG9ubHk8VD4+XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5T2JqZWN0PFQ+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBUXTogRGVlcFJlYWRvbmx5PFRbS10+XG59XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVhZG9ubHlQcmltaXRpdmUgPVxuICB8IG51bWJlclxuICB8IHN0cmluZ1xuICB8IG51bWJlcltdXG4gIHwgc3RyaW5nW11cbiAgfCBib29sZWFuXG4gIHwgYm9vbGVhbltdXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZWFkb25seUNvbXBvbmVudFNjaGVtYTxcbiAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25cbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZ2V0J10+XG4gICAgOiBuZXZlclxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5PFQ+ID0gVCBleHRlbmRzIFJlYWRvbmx5UHJpbWl0aXZlXG4gID8gVFxuICA6IFQgZXh0ZW5kcyBNYXA8aW5mZXIgSywgaW5mZXIgVj5cbiAgPyBEZWVwUmVhZG9ubHlNYXA8SywgVj5cbiAgOiBUIGV4dGVuZHMgU2V0PGluZmVyIE0+XG4gID8gRGVlcFJlYWRvbmx5U2V0PE0+XG4gIDogRGVlcFJlYWRvbmx5T2JqZWN0PFQ+XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVhZG9ubHk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdmFsOiBUXG4pOiBEZWVwUmVhZG9ubHk8VD4ge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnZhbCB9KSBhcyBEZWVwUmVhZG9ubHk8VD5cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIsIGNyZWF0ZUJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IGRlZXBSZWFkb25seSwgRGVlcFJlYWRvbmx5IH0gZnJvbSAnLi9yZWFkb25seSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVjc1Jlc3VsdDxUIGV4dGVuZHMgSVNjaGVtYT4gPSBUIGV4dGVuZHMgSVNjaGVtYVxuICA/IFJldHVyblR5cGU8VFsnZGVzZXJpYWxpemUnXT5cbiAgOiBuZXZlclxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50VHlwZTxUIGV4dGVuZHMgSVNjaGVtYT4gPSBFY3NSZXN1bHQ8VD5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudERlZmluaXRpb248XG4gIFQgZXh0ZW5kcyBJU2NoZW1hID0gSVNjaGVtYTxhbnk+LFxuICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4+ID0ge1xuICBfaWQ6IG51bWJlclxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50XG4gICAqL1xuICBkZWZhdWx0KCk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PlxuXG4gIC8qKlxuICAgKiBHZXQgaWYgdGhlIGVudGl0eSBoYXMgdGhpcyBjb21wb25lbnRcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uaGFzKG15RW50aXR5KSAvLyByZXR1cm4gZmFsc2VcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogVHJhbnNmb3JtLmhhcyhteUVudGl0eSkgLy8gcmV0dXJuIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBoYXMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhZG9ubHkgY29tcG9uZW50IG9mIHRoZSBlbnRpdHkgKHRvIG11dGF0ZSBpdCwgdXNlIGdldE11dGFibGUgaW5zdGVhZCksIHRocm93IGFuIGVycm9yIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHJldHVyblxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0KG15RW50aXR5KSAvLyByZXR1cm4gdHJ1ZVxuICAgKiBsb2codHJhbnNmb3JtLnBvc2l0aW9uLnggPT09IDApIC8vIGxvZyAndHJ1ZSdcbiAgICpcbiAgICogdHJhbnNmb3JtLnBvc2l0aW9uLnkgPSAxMCAvLyBpbGxlZ2FsIHN0YXRlbWVudCwgdG8gbXV0YXRlIHRoZSBjb21wb25lbnQgdXNlIGdldE11dGFibGVcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG90aGVyRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yISFcbiAgICogYGBgXG4gICAqL1xuICBnZXQoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICAvKipcbiAgICogR2V0IHRoZSByZWFkb25seSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSAodG8gbXV0YXRlIGl0LCB1c2UgZ2V0TXV0YWJsZSBpbnN0ZWFkKSwgb3IgbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEByZXR1cm5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3Qgb3RoZXJFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogbG9nKFRyYW5zZm9ybS5nZXQob3RoZXJFbnRpdHkpID09PSBudWxsKSAvLyBsb2cgJ3RydWUnXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0T3JOdWxsKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBhbHJlYWR5IGV4aXN0cyAodXNlIGBjcmVhdGVPclJlcGxhY2VgIGluc3RlYWQpLlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCB2YWx1ZVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5LCB7IC4uLlRyYW5zZm9ybS5kZWZhdWx0KCksIHBvc2l0aW9uOiB7eDogNCwgeTogMCwgejogNH0gfSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIHRocm93IGFuIGVycm9yLCB0aGUgYFRyYW5zZm9ybWAgY29tcG9uZW50IGFscmVhZHkgZXhpc3RzIGluIGBteUVudGl0eWBcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb25zdHJ1Y3RvclR5cGUpOiBDb21wb25lbnRUeXBlPFQ+XG4gIC8qKlxuICAgKiBBZGQgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSBvciByZXBsYWNlIHRoZSBjb250ZW50IGlmIHRoZSBlbnRpdHkgYWxyZWFkeSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIHZhbCBUaGUgaW5pdGlhbCBvciBuZXcgdmFsdWVcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5jcmVhdGVPclJlcGxhY2UobXlFbnRpdHksIHsgLi4uVHJhbnNmb3JtLmRlZmF1bHQoKSwgcG9zaXRpb246IHt4OiA0LCB5OiAwLCB6OiA0fSB9KSAvLyBvayFcbiAgICogYGBgYFxuICAgKi9cbiAgY3JlYXRlT3JSZXBsYWNlKGVudGl0eTogRW50aXR5LCB2YWw/OiBDb21wb25lbnRUeXBlPFQ+KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBEZWxldGUgdGhlIGN1cnJlbnQgY29tcG9uZW50IHRvIGFuIGVudGl0eSwgcmV0dXJuIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGN1cnJlbnQgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gb2shXG4gICAqIFRyYW5zZm9ybS5kZWxldGVGcm9tKG15RW50aXR5KSAvLyByZXR1cm4gdGhlIGNvbXBvbmVudFxuICAgKiBUcmFuc2Zvcm0uZGVsZXRlRnJvbShteUVudGl0eSkgLy8gcmV0dXJuIG51bGxcbiAgICogYGBgYFxuICAgKi9cbiAgZGVsZXRlRnJvbShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbXV0YWJsZSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIFRyYW5zZm9ybS5nZXRNdXRhYmxlKG15RW50aXR5KS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiBgYGBgXG4gICAqL1xuICBnZXRNdXRhYmxlKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPlxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG11dGFibGUgY29tcG9uZW50IG9mIHRoZSBlbnRpdHksIHJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0TXV0YWJsZU9yTnVsbChteUVudGl0eSlcbiAgICogaWYgKHRyYW5zZm9ybSkge1xuICAgKiAgIHRyYW5zZm9ybS5wb3NpdGlvbiA9IHt4OiA0LCB5OiAwLCB6OiA0fVxuICAgKiB9XG4gICAqIGBgYGBcbiAgICovXG4gIGdldE11dGFibGVPck51bGwoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBzZXJ0RnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgdXBkYXRlRnJvbUJpbmFyeShlbnRpdHk6IEVudGl0eSwgZGF0YTogQnl0ZUJ1ZmZlcik6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLy8gYWxsb2NhdGVzIGEgYnVmZmVyIGFuZCByZXR1cm5zIG5ldyBidWZmZXJcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqL1xuICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXJcblxuICAvLyB3cml0ZXMgdG8gYSBwcmUtYWxsb2NhdGVkIGJ1ZmZlclxuICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVXNlIGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQ29tcG9uZW50KSBpbnN0ZWFkLlxuICAgKiBHZXQgdGhlIGl0ZXJhdG9yIHRvIGV2ZXJ5IGVudGl0eSBoYXMgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgaXRlcmF0b3IoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+XG5cbiAgLy8gRGlydHlcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGlydHlJdGVyYXRvcigpOiBJdGVyYWJsZTxFbnRpdHk+XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNsZWFyRGlydHkoKTogdm9pZFxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBpc0RpcnR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuPihcbiAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgc3BlYzogVCxcbiAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gIC8vIG1ldGE6IHsgc3luY0ZsYWdzIH1cbik6IENvbXBvbmVudERlZmluaXRpb248VCwgQ29uc3RydWN0b3JUeXBlPiB7XG4gIGNvbnN0IGRhdGEgPSBuZXcgTWFwPEVudGl0eSwgQ29tcG9uZW50VHlwZTxUPj4oKVxuICBjb25zdCBkaXJ0eUl0ZXJhdG9yID0gbmV3IFNldDxFbnRpdHk+KClcblxuICBjb25zdCBkZWZhdWx0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gIGlmIChjb25zdHJ1Y3RvckRlZmF1bHQpIHtcbiAgICBzcGVjLnNlcmlhbGl6ZShjb25zdHJ1Y3RvckRlZmF1bHQsIGRlZmF1bHRCdWZmZXIpXG4gIH1cblxuICBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKGNvbnN0cnVjdG9yRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUoXG4gICAgICAgIGNyZWF0ZUJ5dGVCdWZmZXIoe1xuICAgICAgICAgIHdyaXRpbmc6IHtcbiAgICAgICAgICAgIGJ1ZmZlcjogZGVmYXVsdEJ1ZmZlci5idWZmZXIoKSxcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQ6IGRlZmF1bHRCdWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzcGVjLmNyZWF0ZSgpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlZmlsbFZhbHVlKHZhbHVlOiBDb25zdHJ1Y3RvclR5cGUpIHtcbiAgICByZXR1cm4geyAuLi5nZXREZWZhdWx0VmFsdWUoKSwgLi4udmFsdWUgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBfaWQ6IGNvbXBvbmVudElkLFxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXREZWZhdWx0VmFsdWUoKVxuICAgIH0sXG4gICAgaXNEaXJ0eTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGlydHlJdGVyYXRvci5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkYXRhLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBkZWxldGVGcm9tOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBkYXRhLmRlbGV0ZShlbnRpdHkpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50IHx8IG51bGxcbiAgICB9LFxuICAgIGdldE9yTnVsbDogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHlcbiAgICApOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgPyBkZWVwUmVhZG9ubHkoY29tcG9uZW50KSA6IG51bGxcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2dldEZyb21dIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZXBSZWFkb25seShjb21wb25lbnQpXG4gICAgfSxcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbY3JlYXRlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBhbHJlYWR5IGV4aXN0c2BcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY29uc3QgdXNlZFZhbHVlID1cbiAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRWYWx1ZSgpIDogcHJlZmlsbFZhbHVlKHZhbHVlKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCB1c2VkVmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gdXNlZFZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGVPclJlcGxhY2U6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgdmFsdWU/OiBDb25zdHJ1Y3RvclR5cGVcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0VmFsdWUoKSA6IHByZWZpbGxWYWx1ZSh2YWx1ZSlcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlISlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWUhXG4gICAgfSxcbiAgICBnZXRNdXRhYmxlT3JOdWxsOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIH0sXG4gICAgZ2V0TXV0YWJsZTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFttdXRhYmxlXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICAgIGl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPiB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudF0gb2YgZGF0YSkge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCBjb21wb25lbnRdXG4gICAgICB9XG4gICAgfSxcbiAgICBkaXJ0eUl0ZXJhdG9yOiBmdW5jdGlvbiogKCk6IEl0ZXJhYmxlPEVudGl0eT4ge1xuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGlydHlJdGVyYXRvcikge1xuICAgICAgICB5aWVsZCBlbnRpdHlcbiAgICAgIH1cbiAgICB9LFxuICAgIHRvQmluYXJ5KGVudGl0eTogRW50aXR5KTogQnl0ZUJ1ZmZlciB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt0b0JpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyaXRlQnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIHdyaXRlQnVmZmVyKVxuICAgICAgcmV0dXJuIHdyaXRlQnVmZmVyXG4gICAgfSxcbiAgICB3cml0ZVRvQnl0ZUJ1ZmZlcihlbnRpdHk6IEVudGl0eSwgYnVmZmVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt3cml0ZVRvQnl0ZUJ1ZmZlcl0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHNwZWMuc2VyaWFsaXplKGNvbXBvbmVudCwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBkYXRlRnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdXBkYXRlRnJvbUJpbmFyeV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy51cHNlcnRGcm9tQmluYXJ5KGVudGl0eSwgYnVmZmVyKVxuICAgIH0sXG4gICAgdXBzZXJ0RnJvbUJpbmFyeShcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYnVmZmVyOiBCeXRlQnVmZmVyXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzcGVjLmRlc2VyaWFsaXplKGJ1ZmZlcilcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgbmV3VmFsdWUpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNsZWFyRGlydHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpcnR5SXRlcmF0b3IuY2xlYXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5cbmV4cG9ydCBuYW1lc3BhY2UgRW50aXR5VXRpbHMge1xuICAvKipcbiAgICogUmFuZ2UgaXMgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHRoZSBsYXN0IHBvc3NpYmxlIGVsZW1lbnQsIHRoZXkgYm90aCBhcmUgaW5jbHVkZWQgaW4gdGhlIGludGVydmFsLlxuICAgKiBbc3RhcnQsIGVuZF1cbiAgICovXG4gIGV4cG9ydCB0eXBlIEVudGl0eVJhbmdlID0gcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXVxuXG4gIGV4cG9ydCBjb25zdCBNQVhfRU5USVRJRVMgPSAweGZmZmZmZmZmXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FUID0gMTAwZTNcbiAgZXhwb3J0IGNvbnN0IFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyA9IDUxMlxuXG4gIGV4cG9ydCBjb25zdCBSRVNFUlZFRF9FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgMCxcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMgLSAxXG4gIF1cblxuICBleHBvcnQgY29uc3QgU1RBVElDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMsXG4gICAgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCAtIDFcbiAgXVxuXG4gIGV4cG9ydCBjb25zdCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FULFxuICAgIE1BWF9FTlRJVElFU1xuICBdXG5cbiAgZnVuY3Rpb24gaXNJblJhbmdlKGVudGl0eTogRW50aXR5LCByYW5nZTogRW50aXR5UmFuZ2UpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ID49IHJhbmdlWzBdICYmIGVudGl0eSA8PSByYW5nZVsxXVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBEWU5BTUlDX0VOVElUSUVTX1JBTkdFKVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzU3RhdGljRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFNUQVRJQ19FTlRJVElFU19SQU5HRSlcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1Jlc2VydmVkRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIFJFU0VSVkVEX0VOVElUSUVTX1JBTkdFKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudGl0eVV0aWxzXG4iLCJpbXBvcnQgeyBFbnRpdHlVdGlscyB9IGZyb20gJy4vZW50aXR5LXV0aWxzJ1xuXG5kZWNsYXJlIGNvbnN0IGVudGl0eVN5bWJvbDogdW5pcXVlIHN5bWJvbFxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eSA9IG51bWJlciAmIHsgW2VudGl0eVN5bWJvbF06IHRydWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5Q29udGFpbmVyKCkge1xuICBjb25zdCBzdGF0aWNFbnRpdHkgPSBFbnRpdHkoRW50aXR5VXRpbHMuU1RBVElDX0VOVElUSUVTX1JBTkdFKVxuICBjb25zdCBkeW5hbWljRW50aXR5ID0gRW50aXR5KEVudGl0eVV0aWxzLkRZTkFNSUNfRU5USVRJRVNfUkFOR0UpXG4gIHJldHVybiB7XG4gICAgZ2VuZXJhdGVFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKTogRW50aXR5IHtcbiAgICAgIGlmIChkeW5hbWljKSB7XG4gICAgICAgIHJldHVybiBkeW5hbWljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdGF0aWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdGF0aWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSkgfHwgZHluYW1pY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICAgICAgKVxuICAgIH0sXG4gICAgaXNFbnRpdHlFeGlzdHMoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIEVudGl0eVV0aWxzLmlzUmVzZXJ2ZWRFbnRpdHkoZW50aXR5KSB8fFxuICAgICAgICBzdGF0aWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpIHx8XG4gICAgICAgIGR5bmFtaWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLmhhcyhlbnRpdHkpXG4gICAgICApXG4gICAgfSxcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCk6IFNldDxFbnRpdHk+IHtcbiAgICAgIHJldHVybiBuZXcgU2V0KFtcbiAgICAgICAgLi4uc3RhdGljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKSxcbiAgICAgICAgLi4uZHluYW1pY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKClcbiAgICAgIF0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEVudGl0eShyYW5nZTogRW50aXR5VXRpbHMuRW50aXR5UmFuZ2UpIHtcbiAgZnVuY3Rpb24gY3JlYXRlRW50aXR5KGVudGl0eTogbnVtYmVyKTogRW50aXR5IHtcbiAgICByZXR1cm4gZW50aXR5IGFzIEVudGl0eVxuICB9XG5cbiAgbGV0IGVudGl0eUNvdW50ZXIgPSByYW5nZVswXVxuICBjb25zdCB1c2VkRW50aXRpZXM6IFNldDxFbnRpdHk+ID0gbmV3IFNldCgpXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVFbnRpdHkoKTogRW50aXR5IHtcbiAgICBpZiAoZW50aXR5Q291bnRlciA+PSByYW5nZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSXQgZmFpbHMgdHJ5aW5nIHRvIGdlbmVyYXRlIGFuIGVudGl0eSBvdXQgb2YgcmFuZ2UgWyR7cmFuZ2VbMF19LCAke3JhbmdlWzFdfV0uYFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eSA9IGNyZWF0ZUVudGl0eShlbnRpdHlDb3VudGVyKVxuICAgIGVudGl0eUNvdW50ZXIrK1xuXG4gICAgdXNlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIHVzZWRFbnRpdGllcy5kZWxldGUoZW50aXR5KVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRFeGlzdGluZ0VudGl0aWVzKCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodXNlZEVudGl0aWVzKVxuICAgIH0sXG4gICAgZ2VuZXJhdGVFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5XG4gIH1cbn1cbiIsIi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTeXN0ZW1GbiA9IChkdDogbnVtYmVyKSA9PiB2b2lkXG5cbmV4cG9ydCBjb25zdCBTWVNURU1TX1JFR1VMQVJfUFJJT1JJVFkgPSAxMDBlM1xuXG50eXBlIFN5c3RlbSA9IHtcbiAgZm46IFN5c3RlbUZuXG4gIHByaW9yaXR5OiBudW1iZXJcbiAgbmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3lzdGVtQ29udGFpbmVyKCkge1xuICBjb25zdCBzeXN0ZW1zOiBTeXN0ZW1bXSA9IFtdXG5cbiAgZnVuY3Rpb24gc29ydCgpIHtcbiAgICBzeXN0ZW1zLnNvcnQoKGEsIGIpID0+IGIucHJpb3JpdHkgLSBhLnByaW9yaXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkKGZuOiBTeXN0ZW1GbiwgcHJpb3JpdHk6IG51bWJlciwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzeXN0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZm4gPT09IGZuKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gYWxyZWFkeSBhZGRlZCcpXG4gICAgfSBlbHNlIGlmIChuYW1lICYmIHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gbmFtZSBhbHJlYWR5IHVzZWQnKVxuICAgIH1cblxuICAgIHN5c3RlbXMucHVzaCh7XG4gICAgICBmbixcbiAgICAgIHByaW9yaXR5LFxuICAgICAgbmFtZVxuICAgIH0pXG4gICAgc29ydCgpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUoc2VsZWN0b3I6IHN0cmluZyB8IFN5c3RlbUZuKSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHN5c3RlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmZuID09PSBzZWxlY3RvcilcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBzeXN0ZW1zLnNwbGljZShpbmRleCwgMSlcbiAgICBzb3J0KClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQsXG4gICAgcmVtb3ZlLFxuICAgIGdldFN5c3RlbXMoKSB7XG4gICAgICByZXR1cm4gc3lzdGVtc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZGVmaW5lU2RrQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBTY2hlbWFzIH0gZnJvbSAnLi4vc2NoZW1hcydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBSZXN1bHQsIFNwZWMgfSBmcm9tICcuLi9zY2hlbWFzL01hcCdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBjcmR0U2NlbmVTeXN0ZW0gfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQnXG5pbXBvcnQge1xuICBDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRUeXBlLFxuICBkZWZpbmVDb21wb25lbnQgYXMgZGVmQ29tcG9uZW50XG59IGZyb20gJy4vY29tcG9uZW50J1xuaW1wb3J0IHsgRW50aXR5LCBFbnRpdHlDb250YWluZXIgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IFN5c3RlbUNvbnRhaW5lciwgU1lTVEVNU19SRUdVTEFSX1BSSU9SSVRZLCBTeXN0ZW1GbiB9IGZyb20gJy4vc3lzdGVtcydcbmltcG9ydCB0eXBlIHsgSUVuZ2luZVBhcmFtcywgSUVuZ2luZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBSZWFkb25seUNvbXBvbmVudFNjaGVtYSB9IGZyb20gJy4vcmVhZG9ubHknXG5cbmV4cG9ydCAqIGZyb20gJy4vcmVhZG9ubHknXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJ1xuZXhwb3J0IHsgQ29tcG9uZW50VHlwZSwgRW50aXR5LCBCeXRlQnVmZmVyLCBDb21wb25lbnREZWZpbml0aW9uIH1cblxuZnVuY3Rpb24gcHJlRW5naW5lKCkge1xuICBjb25zdCBlbnRpdHlDb250YWluZXIgPSBFbnRpdHlDb250YWluZXIoKVxuICBjb25zdCBjb21wb25lbnRzRGVmaW5pdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBDb21wb25lbnREZWZpbml0aW9uPGFueT4+KClcbiAgLy8gVE9ETzogZmluZCBhIHdheSB0byBtYWtlIHRoaXMgd29yay5cbiAgLy8gTWF5YmUgYSBwcm94eS9jYWxsYmFjayB0byBiZSB1cC10by1kYXRlXG4gIGNvbnN0IGVudGl0aWVzQ29tcG9uZW50ID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU2V0PENvbXBvbmVudERlZmluaXRpb248YW55PlsnX2lkJ10+XG4gID4oKVxuICBjb25zdCBzeXN0ZW1zID0gU3lzdGVtQ29udGFpbmVyKClcblxuICBmdW5jdGlvbiBhZGRTeXN0ZW0oXG4gICAgZm46IFN5c3RlbUZuLFxuICAgIHByaW9yaXR5OiBudW1iZXIgPSBTWVNURU1TX1JFR1VMQVJfUFJJT1JJVFksXG4gICAgbmFtZT86IHN0cmluZ1xuICApIHtcbiAgICBzeXN0ZW1zLmFkZChmbiwgcHJpb3JpdHksIG5hbWUpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVTeXN0ZW0oc2VsZWN0b3I6IHN0cmluZyB8IFN5c3RlbUZuKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMucmVtb3ZlKHNlbGVjdG9yKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGVudGl0aWVzQ29tcG5vbmVudC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgY29uc3QgZW50aXR5ID0gZW50aXR5Q29udGFpbmVyLmdlbmVyYXRlRW50aXR5KGR5bmFtaWMpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRHluYW1pY0VudGl0eSgpIHtcbiAgICByZXR1cm4gYWRkRW50aXR5KHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBmb3IgKGNvbnN0IFssIGNvbXBvbmVudF0gb2YgY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChjb21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHlDb250YWluZXIucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgVCBleHRlbmRzIElTY2hlbWEsXG4gICAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxULCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICBpZiAoY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gYWxyZWFkeSBkZWNsYXJlZGApXG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbXBvbmVudCA9IGRlZkNvbXBvbmVudDxULCBDb25zdHJ1Y3RvclR5cGU+KFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBzcGVjLFxuICAgICAgY29uc3RydWN0b3JEZWZhdWx0XG4gICAgKVxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLnNldChjb21wb25lbnRJZCwgbmV3Q29tcG9uZW50KVxuICAgIHJldHVybiBuZXdDb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxcbiAgICBUIGV4dGVuZHMgU3BlYyxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBQYXJ0aWFsPFJlc3VsdDxUPj5cbiAgPihcbiAgICBzcGVjOiBULFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gICk6IENvbXBvbmVudERlZmluaXRpb248SVNjaGVtYTxSZXN1bHQ8VD4+LCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShcbiAgICAgIFNjaGVtYXMuTWFwKHNwZWMpLFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wb25lbnQ8VCBleHRlbmRzIElTY2hlbWE+KFxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKVxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gbm90IGZvdW5kLiBZb3UgbmVlZCB0byBkZWNsYXJlIHRoZSBjb21wb25lbnRzIGF0IHRoZSBiZWdpbm5pZyBvZiB0aGUgZW5naW5lIGRlY2xhcmF0aW9uYFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0RW50aXRpZXNXaXRoPFxuICAgIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuICA+KC4uLmNvbXBvbmVudHM6IFQpOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPl0+IHtcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIC4uLmdyb3VwQ29tcF0gb2YgZ2V0Q29tcG9uZW50RGVmR3JvdXAoLi4uY29tcG9uZW50cykpIHtcbiAgICAgIHlpZWxkIFtlbnRpdHksIC4uLmdyb3VwQ29tcC5tYXAoKGMpID0+IGMuZ2V0KGVudGl0eSkpXSBhcyBbXG4gICAgICAgIEVudGl0eSxcbiAgICAgICAgLi4uUmVhZG9ubHlDb21wb25lbnRTY2hlbWE8VD5cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0Q29tcG9uZW50RGVmR3JvdXA8VCBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25bXT4oXG4gICAgLi4uYXJnczogVFxuICApOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5UXT4ge1xuICAgIGNvbnN0IFtmaXJzdENvbXBvbmVudERlZiwgLi4uY29tcG9uZW50RGVmaW5pdGlvbnNdID0gYXJnc1xuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZmlyc3RDb21wb25lbnREZWYuaXRlcmF0b3IoKSkge1xuICAgICAgbGV0IG1hdGNoZXMgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiBjb21wb25lbnREZWZpbml0aW9ucykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudERlZi5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgLi4uYXJnc11cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeXN0ZW1zKCkge1xuICAgIHJldHVybiBzeXN0ZW1zLmdldFN5c3RlbXMoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihjb21wb25lbnRJZDogbnVtYmVyKSB7XG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uZGVsZXRlKGNvbXBvbmVudElkKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRpdGllc0NvbXBvbmVudCxcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbixcbiAgICBhZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eSxcbiAgICByZW1vdmVFbnRpdHksXG4gICAgYWRkU3lzdGVtLFxuICAgIGdldFN5c3RlbXMsXG4gICAgcmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvblxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQcmVFbmdpbmUgPSBSZXR1cm5UeXBlPHR5cGVvZiBwcmVFbmdpbmU+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gRW5naW5lKHsgdHJhbnNwb3J0cyB9OiBJRW5naW5lUGFyYW1zID0ge30pOiBJRW5naW5lIHtcbiAgY29uc3QgZW5naW5lID0gcHJlRW5naW5lKClcbiAgY29uc3QgY3JkdFN5c3RlbSA9IGNyZHRTY2VuZVN5c3RlbSh7IGVuZ2luZSwgdHJhbnNwb3J0czogdHJhbnNwb3J0cyB8fCBbXSB9KVxuICBjb25zdCBiYXNlQ29tcG9uZW50cyA9IGRlZmluZVNka0NvbXBvbmVudHMoZW5naW5lKVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZShkdDogbnVtYmVyKSB7XG4gICAgY3JkdFN5c3RlbS5yZWNlaXZlTWVzc2FnZXMoKVxuXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgZW5naW5lLmdldFN5c3RlbXMoKSkge1xuICAgICAgc3lzdGVtLmZuKGR0KVxuICAgIH1cblxuICAgIC8vIFNlbGVjdGVkIGNvbXBvbmVudHMgdGhhdCBvbmx5IGV4aXN0IG9uZSBmcmFtZVxuICAgIC8vICB0aGVuLCB0aGV5IGFyZSBkZWxldGVkIGJ1dCB0aGVpciBjcmR0IHN0YXRlIGtlZXBzXG4gICAgY29uc3QgcmVtb3ZlU2VsZWN0ZWRDb21wb25lbnRzID0gW1xuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdCxcbiAgICAgIGJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG4gICAgXVxuICAgIGNvbnN0IGV4Y2x1ZGVDb21wb25lbnRJZHMgPSByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMubWFwKChpdGVtKSA9PiBpdGVtLl9pZClcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChjb21wb25lbnREZWYpKSB7XG4gICAgICAgIGNvbXBvbmVudERlZi5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBQZXJmIHRpcFxuICAgIC8vIFNob3VsZCB3ZSBhZGQgc29tZSBkaXJ0eUl0ZXJhdG9yU2V0IGF0IGVuZ2luZSBsZXZlbCBzbyB3ZSBkb250IGhhdmVcbiAgICAvLyB0byBpdGVyYXRlIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zIHRvIGdldCB0aGUgZGlydHkgb25lcyA/XG4gICAgY29uc3QgZGlydHlTZXQgPSBuZXcgTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KClcbiAgICBmb3IgKGNvbnN0IFtjb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAoZXhjbHVkZUNvbXBvbmVudElkcy5pbmNsdWRlcyhjb21wb25lbnRJZCkpIGNvbnRpbnVlXG5cbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRlZmluaXRpb24uZGlydHlJdGVyYXRvcigpKSB7XG4gICAgICAgIGlmICghZGlydHlTZXQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgICBkaXJ0eVNldC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgICAgIH1cbiAgICAgICAgZGlydHlTZXQuZ2V0KGVudGl0eSkhLmFkZChjb21wb25lbnRJZClcbiAgICAgIH1cbiAgICB9XG4gICAgY3JkdFN5c3RlbS5jcmVhdGVNZXNzYWdlcyhkaXJ0eVNldClcblxuICAgIGZvciAoY29uc3QgW19jb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmNsZWFyRGlydHkoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkRW50aXR5OiBlbmdpbmUuYWRkRW50aXR5LFxuICAgIGFkZER5bmFtaWNFbnRpdHk6IGVuZ2luZS5hZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eTogZW5naW5lLnJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW06IGVuZ2luZS5hZGRTeXN0ZW0sXG4gICAgcmVtb3ZlU3lzdGVtOiBlbmdpbmUucmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudDogZW5naW5lLmRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSxcbiAgICBnZXRFbnRpdGllc1dpdGg6IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgsXG4gICAgZ2V0Q29tcG9uZW50OiBlbmdpbmUuZ2V0Q29tcG9uZW50LFxuICAgIHJlbW92ZUNvbXBvbmVudERlZmluaXRpb246IGVuZ2luZS5yZW1vdmVDb21wb25lbnREZWZpbml0aW9uLFxuICAgIHVwZGF0ZSxcbiAgICBSb290RW50aXR5OiAwIGFzIEVudGl0eSxcbiAgICBiYXNlQ29tcG9uZW50c1xuICB9XG59XG4iLCJpbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcbmltcG9ydCB7IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuJ1xuaW1wb3J0IHsgUG9pbnRlckV2ZW50VHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHMuZ2VuJ1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBJRW5naW5lIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IFNjaGVtYXMgfSBmcm9tICcuLi9zY2hlbWFzJ1xuXG5jb25zdCBVcGRhdGVUaW1lc3RhbXBTdGF0ZVNjaGVtYSA9IHtcbiAgdGltZXN0YW1wTGFzdFVwZGF0ZTogU2NoZW1hcy5OdW1iZXIsXG4gIGN1cnJlbnRUaW1lc3RhbXA6IFNjaGVtYXMuTnVtYmVyXG59XG5cbmNvbnN0IFdhc0VudGl0eUNsaWNrQ29tcG9uZW50SUQgPSAxNTAwXG5jb25zdCBJc1BvaW50ZXJFdmVudEFjdGl2ZUNvbXBvbmVudElEID0gMTUwMVxuY29uc3QgRXZlbnRTeXN0ZW1Qcmlvcml0eSA9IDEgPDwgMjBcblxuZXhwb3J0IGZ1bmN0aW9uIHdhc0VudGl0eUNsaWNrZWRHZW5lcmF0b3IoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IFdhc0VudGl0eUNsaWNrQ29tcG9uZW50U3RhdGUgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KFxuICAgIFVwZGF0ZVRpbWVzdGFtcFN0YXRlU2NoZW1hLFxuICAgIFdhc0VudGl0eUNsaWNrQ29tcG9uZW50SURcbiAgKVxuXG4gIFdhc0VudGl0eUNsaWNrQ29tcG9uZW50U3RhdGUuY3JlYXRlKGVuZ2luZS5Sb290RW50aXR5KVxuXG4gIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gV2FzRW50aXR5Q2xpY2tDb21wb25lbnRTdGF0ZS5nZXQoZW5naW5lLlJvb3RFbnRpdHkpXG4gICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lc3RhbXAgPiBzdGF0ZS50aW1lc3RhbXBMYXN0VXBkYXRlKSB7XG4gICAgICBXYXNFbnRpdHlDbGlja0NvbXBvbmVudFN0YXRlLmdldE11dGFibGUoXG4gICAgICAgIGVuZ2luZS5Sb290RW50aXR5XG4gICAgICApLnRpbWVzdGFtcExhc3RVcGRhdGUgPSBzdGF0ZS5jdXJyZW50VGltZXN0YW1wXG4gICAgfVxuICB9LCBFdmVudFN5c3RlbVByaW9yaXR5KVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHksIGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJFdmVudHNSZXN1bHQuZ2V0T3JOdWxsKFxuICAgICAgZW5naW5lLlJvb3RFbnRpdHlcbiAgICApXG5cbiAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBjb21tYW5kcyA9IGNvbXBvbmVudC5jb21tYW5kc1xuXG4gICAgLy8gV2Ugc2VhcmNoIHRoZSBsYXN0IERPV04gY29tbWFuZCBzb3J0ZWQgYnkgdGltZXN0YW1wXG4gICAgY29uc3QgZG93biA9IGZpbmRMYXN0QWN0aW9uKFxuICAgICAgY29tbWFuZHMsXG4gICAgICBQb2ludGVyRXZlbnRUeXBlLkRPV04sXG4gICAgICBhY3Rpb25CdXR0b24sXG4gICAgICBlbnRpdHlcbiAgICApXG4gICAgLy8gV2Ugc2VhcmNoIHRoZSBsYXN0IFVQIGNvbW1hbmQgc29ydGVkIGJ5IHRpbWVzdGFtcFxuICAgIGNvbnN0IHVwID0gZmluZExhc3RBY3Rpb24oXG4gICAgICBjb21tYW5kcyxcbiAgICAgIFBvaW50ZXJFdmVudFR5cGUuVVAsXG4gICAgICBhY3Rpb25CdXR0b24sXG4gICAgICBlbnRpdHlcbiAgICApXG5cbiAgICBpZiAoIWRvd24pIHJldHVybiBmYWxzZVxuICAgIGlmICghdXApIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgc3RhdGUgPSBXYXNFbnRpdHlDbGlja0NvbXBvbmVudFN0YXRlLmdldChlbmdpbmUuUm9vdEVudGl0eSlcblxuICAgIC8vIElmIHRoZSBET1dOIGNvbW1hbmQgaGFzIGhhcHBlbiBiZWZvcmUgdGhlIFVQIGNvbW1hbmRzLCBpdCBtZWFucyB0aGF0IHRoYXQgYSBjbGlja2VkIGhhcyBoYXBwZW5cbiAgICBpZiAoXG4gICAgICBkb3duLnRpbWVzdGFtcCA8IHVwLnRpbWVzdGFtcCAmJlxuICAgICAgdXAudGltZXN0YW1wID4gc3RhdGUudGltZXN0YW1wTGFzdFVwZGF0ZVxuICAgICkge1xuICAgICAgV2FzRW50aXR5Q2xpY2tDb21wb25lbnRTdGF0ZS5nZXRNdXRhYmxlKFxuICAgICAgICBlbmdpbmUuUm9vdEVudGl0eVxuICAgICAgKS5jdXJyZW50VGltZXN0YW1wID0gTWF0aC5tYXgodXAudGltZXN0YW1wLCBzdGF0ZS5jdXJyZW50VGltZXN0YW1wKVxuICAgICAgcmV0dXJuIHRydWUgLy8gY2xpY2tlZFxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQb2ludGVyRXZlbnRBY3RpdmVHZW5lcmF0b3IoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50U3RhdGUgPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KFxuICAgIFVwZGF0ZVRpbWVzdGFtcFN0YXRlU2NoZW1hLFxuICAgIElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50SURcbiAgKVxuXG4gIElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50U3RhdGUuY3JlYXRlKGVuZ2luZS5Sb290RW50aXR5KVxuXG4gIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gSXNQb2ludGVyRXZlbnRBY3RpdmVDb21wb25lbnRTdGF0ZS5nZXQoZW5naW5lLlJvb3RFbnRpdHkpXG4gICAgaWYgKHN0YXRlLmN1cnJlbnRUaW1lc3RhbXAgPiBzdGF0ZS50aW1lc3RhbXBMYXN0VXBkYXRlKSB7XG4gICAgICBJc1BvaW50ZXJFdmVudEFjdGl2ZUNvbXBvbmVudFN0YXRlLmdldE11dGFibGUoXG4gICAgICAgIGVuZ2luZS5Sb290RW50aXR5XG4gICAgICApLnRpbWVzdGFtcExhc3RVcGRhdGUgPSBzdGF0ZS5jdXJyZW50VGltZXN0YW1wXG4gICAgfVxuICB9LCBFdmVudFN5c3RlbVByaW9yaXR5KVxuXG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24sXG4gICAgcG9pbnRlckV2ZW50VHlwZTogUG9pbnRlckV2ZW50VHlwZVxuICApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckV2ZW50c1Jlc3VsdC5nZXRPck51bGwoXG4gICAgICBlbmdpbmUuUm9vdEVudGl0eVxuICAgIClcblxuICAgIGlmICghY29tcG9uZW50KSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGNvbW1hbmRzID0gY29tcG9uZW50LmNvbW1hbmRzXG5cbiAgICAvLyBXZSBzZWFyY2ggdGhlIGxhc3QgcG9pbnRlciBFdmVudCBjb21tYW5kIHNvcnRlZCBieSB0aW1lc3RhbXBcbiAgICBjb25zdCBjb21tYW5kID0gZmluZExhc3RBY3Rpb24oXG4gICAgICBjb21tYW5kcyxcbiAgICAgIHBvaW50ZXJFdmVudFR5cGUsXG4gICAgICBhY3Rpb25CdXR0b24sXG4gICAgICBlbnRpdHlcbiAgICApXG5cbiAgICBpZiAoIWNvbW1hbmQpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgc3RhdGUgPSBJc1BvaW50ZXJFdmVudEFjdGl2ZUNvbXBvbmVudFN0YXRlLmdldChlbmdpbmUuUm9vdEVudGl0eSlcblxuICAgIGlmIChjb21tYW5kLnRpbWVzdGFtcCA+IHN0YXRlLnRpbWVzdGFtcExhc3RVcGRhdGUpIHtcbiAgICAgIElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50U3RhdGUuZ2V0TXV0YWJsZShcbiAgICAgICAgZW5naW5lLlJvb3RFbnRpdHlcbiAgICAgICkuY3VycmVudFRpbWVzdGFtcCA9IE1hdGgubWF4KGNvbW1hbmQudGltZXN0YW1wLCBzdGF0ZS5jdXJyZW50VGltZXN0YW1wKVxuICAgICAgcmV0dXJuIHRydWUgLy8gdXAgY29tcG9uZW50IGlzIGZyb20gYW4gb2xkIGNsaWNrXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGFzdEFjdGlvbihcbiAgY29tbWFuZHM6IHJlYWRvbmx5IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZFtdLFxuICBwb2ludGVyRXZlbnRUeXBlOiBQb2ludGVyRXZlbnRUeXBlLFxuICBhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbixcbiAgZW50aXR5PzogRW50aXR5XG4pOiBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQgfCB1bmRlZmluZWQge1xuICBsZXQgY29tbWFuZFRvUmV0dXJuOiBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQgfCB1bmRlZmluZWQgPVxuICAgIHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3QgY29tbWFuZCBvZiBjb21tYW5kcykge1xuICAgIGlmIChcbiAgICAgIGNvbW1hbmQuYnV0dG9uID09PSBhY3Rpb25CdXR0b24gJiZcbiAgICAgIGNvbW1hbmQuc3RhdGUgPT09IHBvaW50ZXJFdmVudFR5cGUgJiZcbiAgICAgICghZW50aXR5IHx8IChjb21tYW5kLmhpdCAmJiBlbnRpdHkgPT09IGNvbW1hbmQuaGl0LmVudGl0eUlkKSlcbiAgICApIHtcbiAgICAgIGlmICghY29tbWFuZFRvUmV0dXJuIHx8IGNvbW1hbmQudGltZXN0YW1wID49IGNvbW1hbmRUb1JldHVybi50aW1lc3RhbXApXG4gICAgICAgIGNvbW1hbmRUb1JldHVybiA9IGNvbW1hbmRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tbWFuZFRvUmV0dXJuXG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV0d29ya1RyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAvLyBjb25zdCBycGMgPSBuZXcgUnBjVHJhbnNwb3J0KClcbiAgZnVuY3Rpb24gc2VuZCguLi5fYXJnczogYW55W10pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTmV0d29ya01lc3NhZ2UgU2VudDogJywgLi4uYXJncylcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSAnbmV0d29yay10cmFuc3BvcnQnXG4gIHJldHVybiB7XG4gICAgc2VuZCxcbiAgICB0eXBlLFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBTdGF0aWMgZW50aXRpZXMgJiBOZXR3b3JrIGNvbXBvbmVudHNcblxuICAgICAgcmV0dXJuICEhbWVzc2FnZSAvLyB2YWxpZENvbXBvbmVudHMuaW5jbHVkZXMoY29tcG9uZW50SWQpXG4gICAgfVxuICB9XG59XG4iLCIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGVudW0gRUNTQ29tcG9uZW50SURzIHtcblx0VHJhbnNmb3JtID0gMSxcblx0QW5pbWF0b3IgPSAxMDQyLFxuXHRBdWRpb1NvdXJjZSA9IDEwMjAsXG5cdEF2YXRhckF0dGFjaCA9IDEwNzMsXG5cdEF2YXRhck1vZGlmaWVyQXJlYSA9IDEwNzAsXG5cdEF2YXRhclNoYXBlID0gMTA4MCxcblx0QmlsbGJvYXJkID0gMTA5MCxcblx0Qm94U2hhcGUgPSAxMDEzLFxuXHRDYW1lcmFNb2RlID0gMTA3Mixcblx0Q2FtZXJhTW9kZUFyZWEgPSAxMDcxLFxuXHRDeWxpbmRlclNoYXBlID0gMTAxNixcblx0R0xURlNoYXBlID0gMTA0MSxcblx0TWF0ZXJpYWwgPSAxMDE3LFxuXHRNZXNoQ29sbGlkZXIgPSAxMDE5LFxuXHRNZXNoUmVuZGVyZXIgPSAxMDE4LFxuXHRORlRTaGFwZSA9IDEwNDAsXG5cdE9uUG9pbnRlckRvd24gPSAxMDYwLFxuXHRPblBvaW50ZXJEb3duUmVzdWx0ID0gMTA2Nixcblx0T25Qb2ludGVyVXAgPSAxMDYxLFxuXHRPblBvaW50ZXJVcFJlc3VsdCA9IDEwNjUsXG5cdFBsYW5lU2hhcGUgPSAxMDE0LFxuXHRQb2ludGVyRXZlbnRzID0gMTA2Mixcblx0UG9pbnRlckV2ZW50c1Jlc3VsdCA9IDEwNjMsXG5cdFBvaW50ZXJMb2NrID0gMTA3NCxcblx0UmF5Y2FzdCA9IDEwNjcsXG5cdFJheWNhc3RSZXN1bHQgPSAxMDY4LFxuXHRTcGhlcmVTaGFwZSA9IDEwMTUsXG5cdFRleHRTaGFwZSA9IDEwMzAsXG5cdFVpVGV4dCA9IDEwNTIsXG5cdFVpVHJhbnNmb3JtID0gMTA1MCxcblx0VmlzaWJpbGl0eUNvbXBvbmVudCA9IDEwODEsXG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgRUNTQ29tcG9uZW50SURzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbidcblxuY29uc3QgY29tcG9uZW50SWRzID0gT2JqZWN0LnZhbHVlcyhFQ1NDb21wb25lbnRJRHMpXG4gIC5maWx0ZXIoKGEpID0+IHR5cGVvZiBhID09PSAnbnVtYmVyJylcbiAgLm1hcChOdW1iZXIpXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICBpZiAodHlwZW9mIGRjbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgY3JlYXRlIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IHdpdGhvdXQgZ2xvYmFsIGRjbCBvYmplY3QnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICdyZW5kZXJlcidcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHNlbmQobWVzc2FnZTogVWludDhBcnJheSk6IHZvaWQge1xuICAgICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIG5ldyBycGNcbiAgICAgIGRjbFxuICAgICAgICAuY2FsbFJwYygnfnN5c3RlbS9FeHBlcmltZW50YWxBUEknLCAnc2VuZFRvUmVuZGVyZXInLCBbXG4gICAgICAgICAgeyBkYXRhOiBuZXcgVWludDhBcnJheShtZXNzYWdlKSB9XG4gICAgICAgIF0pXG4gICAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW4ge1xuICAgICAgLy8gRWNobyBtZXNzYWdlLCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKG1lc3NhZ2UudHJhbnNwb3J0VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmICghY29tcG9uZW50SWRzLmluY2x1ZGVzKG1lc3NhZ2UuY29tcG9uZW50SWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFtZXNzYWdlXG4gICAgfVxuICB9XG59XG4iLCJkZWNsYXJlIGxldCBQcm9taXNlOiBhbnlcblxuLyoqXG4gKiBBIGNsYXNzIHNlcnZlcyBhcyBhIG1lZGl1bSBiZXR3ZWVuIHRoZSBvYnNlcnZhYmxlIGFuZCBpdHMgb2JzZXJ2ZXJzXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkXG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZlckV2ZW50U3RhdGUge1xuICAvKipcbiAgICogQW4gT2JzZXJ2ZXIgY2FuIHNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gcHJldmVudCBzdWJzZXF1ZW50IG9ic2VydmVycyBvZiBiZWluZyBub3RpZmllZFxuICAgKi9cbiAgcHVibGljIHNraXBOZXh0T2JzZXJ2ZXJzITogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hc2sgdmFsdWUgdGhhdCB3ZXJlIHVzZWQgdG8gdHJpZ2dlciB0aGUgZXZlbnQgY29ycmVzcG9uZGluZyB0byB0aGlzIEV2ZW50U3RhdGUgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgbWFzayE6IG51bWJlclxuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgb3JpZ2luYWxseSBub3RpZmllZCB0aGUgZXZlbnRcbiAgICovXG4gIHB1YmxpYyB0YXJnZXQ/OiBhbnlcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZVxuICAgKi9cbiAgcHVibGljIGN1cnJlbnRUYXJnZXQ/OiBhbnlcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhc3QgZnVuY3Rpb24gdGhhdCB3YXMgZXhlY3V0ZWQuXG4gICAqIElmIGl0IGlzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgY2FsbGJhY2sgY2hhaW4gaXQgd2lsbCBiZSB0aGUgZXZlbnQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBsYXN0UmV0dXJuVmFsdWU/OiBhbnlcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEV2ZW50U3RhdGVcbiAgICogQHBhcmFtIG1hc2sgLSBkZWZpbmVzIHRoZSBtYXNrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0YXRlXG4gICAqIEBwYXJhbSBza2lwTmV4dE9ic2VydmVycyAtIGRlZmluZXMgYSBmbGFnIHdoaWNoIHdpbGwgaW5zdHJ1Y3QgdGhlIG9ic2VydmFibGUgdG8gc2tpcCBmb2xsb3dpbmcgb2JzZXJ2ZXJzIHdoZW4gc2V0IHRvIHRydWVcbiAgICogQHBhcmFtIHRhcmdldCAtIGRlZmluZXMgdGhlIG9yaWdpbmFsIHRhcmdldCBvZiB0aGUgc3RhdGVcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgc3RhdGVcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1hc2s6IG51bWJlcixcbiAgICBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlLFxuICAgIHRhcmdldD86IGFueSxcbiAgICBjdXJyZW50VGFyZ2V0PzogYW55XG4gICkge1xuICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGVcbiAgICogQHBhcmFtIHNraXBOZXh0T2JzZXJ2ZXJzIC0gZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2JzZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGluaXRhbGl6ZShcbiAgICBtYXNrOiBudW1iZXIsXG4gICAgc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZSxcbiAgICB0YXJnZXQ/OiBhbnksXG4gICAgY3VycmVudFRhcmdldD86IGFueVxuICApOiBPYnNlcnZlckV2ZW50U3RhdGUge1xuICAgIHRoaXMubWFzayA9IG1hc2tcbiAgICB0aGlzLnNraXBOZXh0T2JzZXJ2ZXJzID0gc2tpcE5leHRPYnNlcnZlcnNcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldFxuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXRcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50IGFuIE9ic2VydmVyIHJlZ2lzdGVyZWQgdG8gYSBnaXZlbiBPYnNlcnZhYmxlIG9iamVjdC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmVyPFQ+IHtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHByb3BlcnR5IGRlZmluaW5nIHRoYXQgdGhlIG9ic2VydmVyIGFzIHRvIGJlIHVucmVnaXN0ZXJlZCBhZnRlciB0aGUgbmV4dCBub3RpZmljYXRpb25cbiAgICovXG4gIHB1YmxpYyB1bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IGZhbHNlXG5cbiAgLyoqIEZvciBpbnRlcm5hbCB1c2FnZSAqL1xuICBwdWJsaWMgX3dpbGxCZVVucmVnaXN0ZXJlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb2JzZXJ2ZXJcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gZGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBvYnNlcnZlciBpcyBub3RpZmllZFxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgb2YgdGhlIG9ic2VydmVyICh1c2VkIHRvIGZpbHRlciBub3RpZmljYXRpb25zKVxuICAgKiBAcGFyYW0gc2NvcGUgLSBkZWZpbmVzIHRoZSBjdXJyZW50IHNjb3BlIHVzZWQgdG8gcmVzdG9yZSB0aGUgSlMgY29udGV4dFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBvYnNlcnZlciBpcyBub3RpZmllZFxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxsYmFjazogKGV2ZW50RGF0YTogVCwgZXZlbnRTdGF0ZTogT2JzZXJ2ZXJFdmVudFN0YXRlKSA9PiB2b2lkLFxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG1hc2sgb2YgdGhlIG9ic2VydmVyICh1c2VkIHRvIGZpbHRlciBub3RpZmljYXRpb25zKVxuICAgICAqL1xuICAgIHB1YmxpYyBtYXNrOiBudW1iZXIsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgY3VycmVudCBzY29wZSB1c2VkIHRvIHJlc3RvcmUgdGhlIEpTIGNvbnRleHRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2NvcGU6IGFueSA9IG51bGxcbiAgKSB7fVxufVxuXG4vKipcbiAqIFRoZSBPYnNlcnZhYmxlIGNsYXNzIGlzIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPYnNlcnZhYmxlIHBhdHRlcm4uXG4gKlxuICogVGhlcmUncyBvbmUgc2xpZ2h0IHBhcnRpY3VsYXJpdHkgdGhvdWdoOiBhIGdpdmVuIE9ic2VydmFibGUgY2FuIG5vdGlmeSBpdHMgb2JzZXJ2ZXIgdXNpbmcgYSBwYXJ0aWN1bGFyIG1hc2sgdmFsdWUsIG9ubHkgdGhlIE9ic2VydmVycyByZWdpc3RlcmVkIHdpdGggdGhpcyBtYXNrIHZhbHVlIHdpbGwgYmUgbm90aWZpZWQuXG4gKiBUaGlzIGVuYWJsZSBhIG1vcmUgZmluZSBncmFpbmVkIGV4ZWN1dGlvbiB3aXRob3V0IGhhdmluZyB0byByZWx5IG9uIG11bHRpcGxlIGRpZmZlcmVudCBPYnNlcnZhYmxlIG9iamVjdHMuXG4gKiBGb3IgaW5zdGFuY2UgeW91IG1heSBoYXZlIGEgZ2l2ZW4gT2JzZXJ2YWJsZSB0aGF0IGhhdmUgZm91ciBkaWZmZXJlbnQgdHlwZXMgb2Ygbm90aWZpY2F0aW9uczogTW92ZSAobWFzayA9IDB4MDEpLCBTdG9wIChtYXNrID0gMHgwMiksIFR1cm4gUmlnaHQgKG1hc2sgPSAwWDA0KSwgVHVybiBMZWZ0IChtYXNrID0gMFgwOCkuXG4gKiBBIGdpdmVuIG9ic2VydmVyIGNhbiByZWdpc3RlciBpdHNlbGYgd2l0aCBvbmx5IE1vdmUgYW5kIFN0b3AgKG1hc2sgPSAweDAzKSwgdGhlbiBpdCB3aWxsIG9ubHkgYmUgbm90aWZpZWQgd2hlbiBvbmUgb2YgdGhlc2UgdHdvIG9jY3VycyBhbmQgd2lsbCBuZXZlciBiZSBmb3IgVHVybiBMZWZ0L1JpZ2h0LlxuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFibGU8VD4ge1xuICBwcml2YXRlIF9vYnNlcnZlcnMgPSBuZXcgQXJyYXk8T2JzZXJ2ZXI8VD4+KClcblxuICBwcml2YXRlIF9ldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGVcblxuICBwcml2YXRlIF9vbk9ic2VydmVyQWRkZWQ6IG51bGwgfCAoKG9ic2VydmVyOiBPYnNlcnZlcjxUPikgPT4gdm9pZCkgPSBudWxsXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgb2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gb25PYnNlcnZlckFkZGVkIC0gZGVmaW5lcyBhIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiBhIG5ldyBvYnNlcnZlciBpcyBhZGRlZFxuICAgKi9cbiAgY29uc3RydWN0b3Iob25PYnNlcnZlckFkZGVkPzogKG9ic2VydmVyOiBPYnNlcnZlcjxUPikgPT4gdm9pZCkge1xuICAgIHRoaXMuX2V2ZW50U3RhdGUgPSBuZXcgT2JzZXJ2ZXJFdmVudFN0YXRlKDApXG5cbiAgICBpZiAob25PYnNlcnZlckFkZGVkKSB7XG4gICAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQgPSBvbk9ic2VydmVyQWRkZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9ic2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYWxsYmFja1xuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGZvciB0aGF0IE9ic2VydmVyXG4gICAqIEBwYXJhbSBtYXNrIC0gdGhlIG1hc2sgdXNlZCB0byBmaWx0ZXIgb2JzZXJ2ZXJzXG4gICAqIEBwYXJhbSBpbnNlcnRGaXJzdCAtIGlmIHRydWUgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIGZpcnN0IHBvc2l0aW9uLCBoZW5jZSBleGVjdXRlZCBiZWZvcmUgdGhlIG90aGVycyBvbmVzLiBJZiBmYWxzZSAoZGVmYXVsdCBiZWhhdmlvcikgdGhlIGNhbGxiYWNrIHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIGxhc3QgcG9zaXRpb24sIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgb3RoZXJzIGFscmVhZHkgcHJlc2VudC5cbiAgICogQHBhcmFtIHNjb3BlIC0gb3B0aW9uYWwgc2NvcGUgZm9yIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgZnJvbVxuICAgKiBAcGFyYW0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsIC0gZGVmaW5lcyBpZiB0aGUgb2JzZXJ2ZXIgYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGNyZWF0ZWQgZm9yIHRoZSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGFkZChcbiAgICBjYWxsYmFjazogKGV2ZW50RGF0YTogVCwgZXZlbnRTdGF0ZTogT2JzZXJ2ZXJFdmVudFN0YXRlKSA9PiB2b2lkLFxuICAgIG1hc2s6IG51bWJlciA9IC0xLFxuICAgIGluc2VydEZpcnN0ID0gZmFsc2UsXG4gICAgc2NvcGU6IGFueSA9IG51bGwsXG4gICAgdW5yZWdpc3Rlck9uRmlyc3RDYWxsID0gZmFsc2VcbiAgKTogbnVsbCB8IE9ic2VydmVyPFQ+IHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrLCBtYXNrLCBzY29wZSlcbiAgICBvYnNlcnZlci51bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IHVucmVnaXN0ZXJPbkZpcnN0Q2FsbFxuXG4gICAgaWYgKGluc2VydEZpcnN0KSB7XG4gICAgICB0aGlzLl9vYnNlcnZlcnMudW5zaGlmdChvYnNlcnZlcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29uT2JzZXJ2ZXJBZGRlZCkge1xuICAgICAgdGhpcy5fb25PYnNlcnZlckFkZGVkKG9ic2VydmVyKVxuICAgIH1cblxuICAgIHJldHVybiBvYnNlcnZlclxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBPYnNlcnZlciB3aXRoIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgYW5kIHVucmVnaXN0ZXJzIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGZvciB0aGF0IE9ic2VydmVyXG4gICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgYWRkT25jZShcbiAgICBjYWxsYmFjazogKGV2ZW50RGF0YTogVCwgZXZlbnRTdGF0ZTogT2JzZXJ2ZXJFdmVudFN0YXRlKSA9PiB2b2lkXG4gICk6IG51bGwgfCBPYnNlcnZlcjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkKGNhbGxiYWNrLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBPYnNlcnZlciBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdFxuICAgKiBAcGFyYW0gb2JzZXJ2ZXIgLSB0aGUgaW5zdGFuY2Ugb2YgdGhlIE9ic2VydmVyIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyBmYWxzZSBpZiBpdCBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIE9ic2VydmFibGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmUob2JzZXJ2ZXI6IG51bGwgfCBPYnNlcnZlcjxUPik6IGJvb2xlYW4ge1xuICAgIGlmICghb2JzZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpXG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzZXJ2ZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIE9ic2VydmFibGUgb2JqZWN0XG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0byByZW1vdmVcbiAgICogQHBhcmFtIHNjb3BlIC0gb3B0aW9uYWwgc2NvcGUuIElmIHVzZWQgb25seSB0aGUgY2FsbGJhY2tzIHdpdGggdGhpcyBzY29wZSB3aWxsIGJlIHJlbW92ZWRcbiAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQ2FsbGJhY2soXG4gICAgY2FsbGJhY2s6IChldmVudERhdGE6IFQsIGV2ZW50U3RhdGU6IE9ic2VydmVyRXZlbnRTdGF0ZSkgPT4gdm9pZCxcbiAgICBzY29wZT86IGFueVxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fb2JzZXJ2ZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJlxuICAgICAgICAoIXNjb3BlIHx8IHNjb3BlID09PSB0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLnNjb3BlKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuX2RlZmVyVW5yZWdpc3Rlcih0aGlzLl9vYnNlcnZlcnNbaW5kZXhdKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSBhbGwgT2JzZXJ2ZXJzIGJ5IGNhbGxpbmcgdGhlaXIgcmVzcGVjdGl2ZSBjYWxsYmFjayB3aXRoIHRoZSBnaXZlbiBkYXRhXG4gICAqIFdpbGwgcmV0dXJuIHRydWUgaWYgYWxsIG9ic2VydmVycyB3ZXJlIGV4ZWN1dGVkLCBmYWxzZSBpZiBhbiBvYnNlcnZlciBzZXQgc2tpcE5leHRPYnNlcnZlcnMgdG8gdHJ1ZSwgdGhlbiBwcmV2ZW50IHRoZSBzdWJzZXF1ZW50IG9uZXMgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0gZXZlbnREYXRhIC0gZGVmaW5lcyB0aGUgZGF0YSB0byBzZW5kIHRvIGFsbCBvYnNlcnZlcnNcbiAgICogQHBhcmFtIG1hc2sgLSBkZWZpbmVzIHRoZSBtYXNrIG9mIHRoZSBjdXJyZW50IG5vdGlmaWNhdGlvbiAob2JzZXJ2ZXJzIHdpdGggaW5jb21wYXRpYmxlIG1hc2sgKGllIG1hc2sgJiBvYnNlcnZlci5tYXNrID09PSAwKSB3aWxsIG5vdCBiZSBub3RpZmllZClcbiAgICogQHBhcmFtIHRhcmdldCAtIGRlZmluZXMgdGhlIG9yaWdpbmFsIHRhcmdldCBvZiB0aGUgc3RhdGVcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIHRoZSBjdXJyZW50IHRhcmdldCBvZiB0aGUgc3RhdGVcbiAgICogQHJldHVybnMgZmFsc2UgaWYgdGhlIGNvbXBsZXRlIG9ic2VydmVyIGNoYWluIHdhcyBub3QgcHJvY2Vzc2VkIChiZWNhdXNlIG9uZSBvYnNlcnZlciBzZXQgdGhlIHNraXBOZXh0T2JzZXJ2ZXJzIHRvIHRydWUpXG4gICAqL1xuICBwdWJsaWMgbm90aWZ5T2JzZXJ2ZXJzKFxuICAgIGV2ZW50RGF0YTogVCxcbiAgICBtYXNrOiBudW1iZXIgPSAtMSxcbiAgICB0YXJnZXQ/OiBhbnksXG4gICAgY3VycmVudFRhcmdldD86IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlXG4gICAgc3RhdGUubWFzayA9IG1hc2tcbiAgICBzdGF0ZS50YXJnZXQgPSB0YXJnZXRcbiAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2VcbiAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBldmVudERhdGFcblxuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvYnMubWFzayAmIG1hc2spIHtcbiAgICAgICAgaWYgKG9icy5zY29wZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5jYWxsYmFjay5hcHBseShvYnMuc2NvcGUsIFtcbiAgICAgICAgICAgIGV2ZW50RGF0YSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBvYnMuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnMudW5yZWdpc3Rlck9uTmV4dENhbGwpIHtcbiAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIHdpbGwgZXhlY3V0ZSBlYWNoIGNhbGxiYWNrLCBleHBlY3RpbmcgaXQgdG8gYmUgYSBwcm9taXNlIG9yIHJldHVybiBhIHZhbHVlLlxuICAgKiBJZiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluIG9uZSBmdW5jdGlvbiBmYWlscywgdGhlIHByb21pc2Ugd2lsbCBmYWlsIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwgbm90IGNvbnRpbnVlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2YgZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIGNhbGxiYWNrcyB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNhbGxiYWNrcyBpcyBrZXB0LCBjYWxsYmFja3MgYXJlIG5vdCBleGVjdXRlZCBwYXJhbGxlbC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0IChzZWUgRXZlbnRTdGF0ZSlcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIGhlIGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZVxuICAgKiBAcmV0dXJucyB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBjYWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlKFxuICAgIGV2ZW50RGF0YTogVCxcbiAgICBtYXNrOiBudW1iZXIgPSAtMSxcbiAgICB0YXJnZXQ/OiBhbnksXG4gICAgY3VycmVudFRhcmdldD86IGFueVxuICApOiBQcm9taXNlPFQ+IHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgcHJvbWlzZVxuICAgIGxldCBwOiBQcm9taXNlPGFueT4gPSBQcm9taXNlLnJlc29sdmUoZXZlbnREYXRhKVxuXG4gICAgLy8gbm8gb2JzZXJ2ZXJzPyByZXR1cm4gdGhpcyBwcm9taXNlLlxuICAgIGlmICghdGhpcy5fb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHBcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2V2ZW50U3RhdGVcbiAgICBzdGF0ZS5tYXNrID0gbWFza1xuICAgIHN0YXRlLnRhcmdldCA9IHRhcmdldFxuICAgIHN0YXRlLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0XG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuXG4gICAgLy8gZXhlY3V0ZSBvbmUgY2FsbGJhY2sgYWZ0ZXIgYW5vdGhlciAobm90IHVzaW5nIFByb21pc2UuYWxsLCB0aGUgb3JkZXIgaXMgaW1wb3J0YW50KVxuICAgIHRoaXMuX29ic2VydmVycy5mb3JFYWNoKChvYnMpID0+IHtcbiAgICAgIGlmIChzdGF0ZS5za2lwTmV4dE9ic2VydmVycykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChvYnMuX3dpbGxCZVVucmVnaXN0ZXJlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChvYnMubWFzayAmIG1hc2spIHtcbiAgICAgICAgaWYgKG9icy5zY29wZSkge1xuICAgICAgICAgIHAgPSBwLnRoZW4oKGxhc3RSZXR1cm5lZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBsYXN0UmV0dXJuZWRWYWx1ZVxuICAgICAgICAgICAgcmV0dXJuIG9icy5jYWxsYmFjay5hcHBseShvYnMuc2NvcGUsIFtldmVudERhdGEsIHN0YXRlXSlcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAgPSBwLnRoZW4oKGxhc3RSZXR1cm5lZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBsYXN0UmV0dXJuZWRWYWx1ZVxuICAgICAgICAgICAgcmV0dXJuIG9icy5jYWxsYmFjayhldmVudERhdGEsIHN0YXRlKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9icy51bnJlZ2lzdGVyT25OZXh0Q2FsbCkge1xuICAgICAgICAgIHRoaXMuX2RlZmVyVW5yZWdpc3RlcihvYnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gcmV0dXJuIHRoZSBldmVudERhdGFcbiAgICByZXR1cm4gcC50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiBldmVudERhdGFcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSBhIHNwZWNpZmljIG9ic2VydmVyXG4gICAqIEBwYXJhbSBvYnNlcnZlciAtIGRlZmluZXMgdGhlIG9ic2VydmVyIHRvIG5vdGlmeVxuICAgKiBAcGFyYW0gZXZlbnREYXRhIC0gZGVmaW5lcyB0aGUgZGF0YSB0byBiZSBzZW50IHRvIGVhY2ggY2FsbGJhY2tcbiAgICogQHBhcmFtIG1hc2sgLSBpcyB1c2VkIHRvIGZpbHRlciBvYnNlcnZlcnMgZGVmYXVsdHMgdG8gLTFcbiAgICovXG4gIHB1YmxpYyBub3RpZnlPYnNlcnZlcihcbiAgICBvYnNlcnZlcjogT2JzZXJ2ZXI8VD4sXG4gICAgZXZlbnREYXRhOiBULFxuICAgIG1hc2s6IG51bWJlciA9IC0xXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuXG4gICAgb2JzZXJ2ZXIuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYnNlcnZhYmxlIGhhcyBhdCBsZWFzdCBvbmUgb2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyBoYXNPYnNlcnZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29ic2VydmVycy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5PE9ic2VydmVyPFQ+PigpXG4gICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoZSBjdXJyZW50IG9ic2VydmFibGVcbiAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIGNsb25lKCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlPFQ+KClcblxuICAgIHJlc3VsdC5fb2JzZXJ2ZXJzID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKDApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIG9ic2VydmFibGUgaGFuZGxlcyBvYnNlcnZlciByZWdpc3RlcmVkIHdpdGggYSBnaXZlbiBtYXNrXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybnMgd2hldGhlciBvciBub3Qgb25lIG9ic2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZFxuICAgKi9cbiAgcHVibGljIGhhc1NwZWNpZmljTWFzayhtYXNrOiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcjogT2JzZXJ2ZXI8VD4pOiB2b2lkIHtcbiAgICBvYnNlcnZlci51bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IGZhbHNlXG4gICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWVcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpKGFzeW5jICgpID0+XG4gICAgICB0aGlzLl9yZW1vdmUob2JzZXJ2ZXIpXG4gICAgKVxuICB9XG5cbiAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBjYWxsYmFjayBza2lwcGluZy5cbiAgLy8gUmVtb3ZlcyBhbiBvYnNlcnZlciBmcm9tIHRoZSBfb2JzZXJ2ZXIgQXJyYXkuXG4gIHByaXZhdGUgX3JlbW92ZShvYnNlcnZlcjogbnVsbCB8IE9ic2VydmVyPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcilcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi90ZW1wLWZwL09ic2VydmFibGUnXG5cbi8qKlxuICogQGludGVybmFsXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIGNhbGxiYWNrIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBPYnNlcnZhYmxlXG4gKiBjb25zdHJ1Y3RvciB0byBzdWJzY3JpYmUgdG8gdGhlIGV2ZW50cyBvZiB0aGUgRGVjZW50cmFsYW5kSW50ZXJmYWNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmliZXIoZXZlbnROYW1lOiBrZXlvZiBJRXZlbnRzKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkY2wgIT09ICd1bmRlZmluZWQnKSBkY2wuc3Vic2NyaWJlKGV2ZW50TmFtZSlcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4geW91IGNoYW5nZSB5b3VyIGNhbWVyYSBiZXR3ZWVuIDFzdCBhbmQgM3JkIHBlcnNvblxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uQ2FtZXJhTW9kZUNoYW5nZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8XG4gIElFdmVudHNbJ2NhbWVyYU1vZGVDaGFuZ2VkJ11cbj4oY3JlYXRlU3Vic2NyaWJlcignY2FtZXJhTW9kZUNoYW5nZWQnKSlcblxuLyoqXG4gKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHlvdSBjaGFuZ2UgeW91ciBjYW1lcmEgYmV0d2VlbiAxc3QgYW5kIDNyZCBwZXJzb25cbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvbklkbGVTdGF0ZUNoYW5nZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8XG4gIElFdmVudHNbJ2lkbGVTdGF0ZUNoYW5nZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdpZGxlU3RhdGVDaGFuZ2VkJykpXG5cbi8qKlxuICogVGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgYWZ0ZXIgeW91ciBjaGFyYWN0ZXIgZW50ZXJzIHRoZSBzY2VuZS5cbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvbkVudGVyU2NlbmVPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25FbnRlclNjZW5lJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdvbkVudGVyU2NlbmUnKVxuKVxuXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25FbnRlclNjZW5lID0gb25FbnRlclNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoZXNlIGV2ZW50cyBhcmUgdHJpZ2dlcmVkIGFmdGVyIHlvdXIgY2hhcmFjdGVyIGxlYXZlcyB0aGUgc2NlbmUuXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ29uTGVhdmVTY2VuZSddPihcbiAgY3JlYXRlU3Vic2NyaWJlcignb25MZWF2ZVNjZW5lJylcbilcblxuLyoqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLiBVc2Ugb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGNvbnN0IG9uTGVhdmVTY2VuZSA9IG9uTGVhdmVTY2VuZU9ic2VydmFibGVcblxuLyoqXG4gKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciBhbGwgdGhlIHJlc291cmNlcyBvZiB0aGUgc2NlbmUgd2VyZSBsb2FkZWQgKG1vZGVscywgdGV4dHVyZXMsIGV0Yy4uLilcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblNjZW5lUmVhZHlPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snc2NlbmVTdGFydCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcignc2NlbmVTdGFydCcpXG4pXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRXhwcmVzc2lvbk9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1sncGxheWVyRXhwcmVzc2lvbiddXG4+KGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckV4cHJlc3Npb24nKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Qb2ludGVyTG9ja2VkU3RhdGVDaGFuZ2UgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1snb25Qb2ludGVyTG9jayddXG4+KGNyZWF0ZVN1YnNjcmliZXIoJ29uUG9pbnRlckxvY2snKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25WaWRlb0V2ZW50ID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1sndmlkZW9FdmVudCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigndmlkZW9FdmVudCcpXG4pXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUHJvZmlsZUNoYW5nZWQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydwcm9maWxlQ2hhbmdlZCddPihcbiAgY3JlYXRlU3Vic2NyaWJlcigncHJvZmlsZUNoYW5nZWQnKVxuKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1sncGxheWVyQ29ubmVjdGVkJ11cbj4oY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ29ubmVjdGVkJykpXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyRGlzY29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFxuICBJRXZlbnRzWydwbGF5ZXJEaXNjb25uZWN0ZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJEaXNjb25uZWN0ZWQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8XG4gIElFdmVudHNbJ29uUmVhbG1DaGFuZ2VkJ11cbj4oY3JlYXRlU3Vic2NyaWJlcignb25SZWFsbUNoYW5nZWQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJDbGlja2VkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFxuICBJRXZlbnRzWydwbGF5ZXJDbGlja2VkJ11cbj4oY3JlYXRlU3Vic2NyaWJlcigncGxheWVyQ2xpY2tlZCcpKVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogVGhpcyBmdW5jdGlvbiBhZGRzIF9vbmVfIGxpc3RlbmVyIHRvIHRoZSBvbkV2ZW50IGV2ZW50IG9mIGRjbCBpbnRlcmZhY2UuXG4gKiBMZXZlcmFnaW5nIGEgc3dpdGNoIHRvIHJvdXRlIGV2ZW50cyB0byB0aGUgT2JzZXJ2YWJsZSBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9pbml0RXZlbnRPYnNlcnZhYmxlcygpIHtcbiAgaWYgKHR5cGVvZiBkY2wgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGNsLm9uRXZlbnQoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnb25FbnRlclNjZW5lJzoge1xuICAgICAgICAgIG9uRW50ZXJTY2VuZU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydvbkVudGVyU2NlbmUnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdvbkxlYXZlU2NlbmUnOiB7XG4gICAgICAgICAgb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ29uTGVhdmVTY2VuZSddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2NhbWVyYU1vZGVDaGFuZ2VkJzoge1xuICAgICAgICAgIG9uQ2FtZXJhTW9kZUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1snY2FtZXJhTW9kZUNoYW5nZWQnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdpZGxlU3RhdGVDaGFuZ2VkJzoge1xuICAgICAgICAgIG9uSWRsZVN0YXRlQ2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydpZGxlU3RhdGVDaGFuZ2VkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnc2NlbmVTdGFydCc6IHtcbiAgICAgICAgICBvblNjZW5lUmVhZHlPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1snc2NlbmVTdGFydCddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BsYXllckV4cHJlc3Npb24nOiB7XG4gICAgICAgICAgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ3BsYXllckV4cHJlc3Npb24nXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICd2aWRlb0V2ZW50Jzoge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRGF0YSA9IGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sndmlkZW9FdmVudCddXG4gICAgICAgICAgb25WaWRlb0V2ZW50Lm5vdGlmeU9ic2VydmVycyh2aWRlb0RhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncHJvZmlsZUNoYW5nZWQnOiB7XG4gICAgICAgICAgb25Qcm9maWxlQ2hhbmdlZC5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ3Byb2ZpbGVDaGFuZ2VkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnb25Qb2ludGVyTG9jayc6IHtcbiAgICAgICAgICBvblBvaW50ZXJMb2NrZWRTdGF0ZUNoYW5nZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ29uUG9pbnRlckxvY2snXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJDb25uZWN0ZWQnOiB7XG4gICAgICAgICAgb25QbGF5ZXJDb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sncGxheWVyQ29ubmVjdGVkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyRGlzY29ubmVjdGVkJzoge1xuICAgICAgICAgIG9uUGxheWVyRGlzY29ubmVjdGVkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ3BsYXllckRpc2Nvbm5lY3RlZCddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ29uUmVhbG1DaGFuZ2VkJzoge1xuICAgICAgICAgIG9uUmVhbG1DaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ29uUmVhbG1DaGFuZ2VkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyQ2xpY2tlZCc6IHtcbiAgICAgICAgICBvblBsYXllckNsaWNrZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sncGxheWVyQ2xpY2tlZCddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuIiwiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAZGNsL3Bvc2l4XCIgLz5cblxuLyoqXG4gKiBAYWxwaGEgKiBUaGlzIGZpbGUgaW5pdGlhbGl6YXRpb24gaXMgYW4gYWxwaGEgb25lLiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBvbGQtZWNzXG4gKiBpbml0IGFuZCBpdCdsbCBiZSBjaGFuZ2luZy5cbiAqL1xuXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuLi9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCB7IFBvaW50ZXJFdmVudFR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9Qb2ludGVyRXZlbnRzLmdlbidcbmltcG9ydCB7IEVuZ2luZSwgRW50aXR5IH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHtcbiAgaXNQb2ludGVyRXZlbnRBY3RpdmVHZW5lcmF0b3IsXG4gIHdhc0VudGl0eUNsaWNrZWRHZW5lcmF0b3Jcbn0gZnJvbSAnLi4vZW5naW5lL2V2ZW50cydcbmltcG9ydCB7IGNyZWF0ZU5ldHdvcmtUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0J1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgfSBmcm9tICcuLi9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydCdcbmltcG9ydCB7IF9pbml0RXZlbnRPYnNlcnZhYmxlcyB9IGZyb20gJy4vb2JzZXJ2YWJsZXMnXG5cbmNvbnN0IHJlbmRlcmVyVHJhbnNwb3J0ID0gY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoKVxuZXhwb3J0IGNvbnN0IGVuZ2luZSA9IEVuZ2luZSh7XG4gIHRyYW5zcG9ydHM6IFtyZW5kZXJlclRyYW5zcG9ydCwgY3JlYXRlTmV0d29ya1RyYW5zcG9ydCgpXVxufSlcblxuaWYgKHR5cGVvZiBkY2wgIT09ICd1bmRlZmluZWQnKSB7XG4gIGRjbC5sb2FkTW9kdWxlKCd+c3lzdGVtL0V4cGVyaW1lbnRhbEFQSScsIHt9KS5jYXRjaChkY2wuZXJyb3IpXG5cbiAgYXN5bmMgZnVuY3Rpb24gcHVsbFJlbmRlcmVyTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBkY2wuY2FsbFJwYyhcbiAgICAgICd+c3lzdGVtL0V4cGVyaW1lbnRhbEFQSScsXG4gICAgICAnbWVzc2FnZUZyb21SZW5kZXJlcicsXG4gICAgICBbXVxuICAgIClcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5sZW5ndGgpIHtcbiAgICAgIGlmIChyZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlQXJyYXkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZShieXRlQXJyYXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkY2wub25VcGRhdGUoKGR0OiBudW1iZXIpID0+IHtcbiAgICBwdWxsUmVuZGVyZXJNZXNzYWdlcygpXG4gICAgICAuY2F0Y2goZGNsLmVycm9yKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gZW5naW5lLnVwZGF0ZShkdCkpXG4gIH0pXG5cbiAgX2luaXRFdmVudE9ic2VydmFibGVzKClcbn1cblxuZXhwb3J0IGNvbnN0IGxvZyA9IGRjbC5sb2dcbmV4cG9ydCBjb25zdCBlcnJvciA9IGRjbC5lcnJvclxuXG5sZXQgd2FzRW50aXR5Q2xpY2tlZEZ1bmM6XG4gIHwgKChlbnRpdHk6IEVudGl0eSwgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24pID0+IGJvb2xlYW4pXG4gIHwgbnVsbCA9IG51bGxcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlbnRpdHkgZW1pdHRlZCBhIGNsaWNrZWQgZXZlbnRcbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byBxdWVyeSwgZm9yIGdsb2JhbCBjbGlja3MgdXNlIGBlbmdpbmUuUm9vdEVudGl0eWBcbiAqIEBwYXJhbSBhY3Rpb25CdXR0b25cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGVudGl0eSB3YXMgY2xpY2tlZCBpbiB0aGUgbGFzdCB0aWNrLXVwZGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FzRW50aXR5Q2xpY2tlZChlbnRpdHk6IEVudGl0eSwgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24pIHtcbiAgaWYgKCF3YXNFbnRpdHlDbGlja2VkRnVuYykge1xuICAgIHdhc0VudGl0eUNsaWNrZWRGdW5jID0gd2FzRW50aXR5Q2xpY2tlZEdlbmVyYXRvcihlbmdpbmUpXG4gIH1cbiAgcmV0dXJuIHdhc0VudGl0eUNsaWNrZWRGdW5jKGVudGl0eSwgYWN0aW9uQnV0dG9uKVxufVxuXG5sZXQgaXNQb2ludGVyRXZlbnRBY3RpdmVGdW5jOlxuICB8ICgoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uLFxuICAgICAgcG9pbnRlckV2ZW50VHlwZTogUG9pbnRlckV2ZW50VHlwZVxuICAgICkgPT4gYm9vbGVhbilcbiAgfCBudWxsID0gbnVsbFxuXG4vKipcbiAqIENoZWNrIGlmIGEgcG9pbnRlciBldmVudCBoYXMgYmVlbiBlbWl0ZWQgaW4gdGhlIGxhc3QgdGljay11cGRhdGUuXG4gKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdG8gcXVlcnksIGZvciBnbG9iYWwgY2xpY2tzIHVzZSBgZW5naW5lLlJvb3RFbnRpdHlgXG4gKiBAcGFyYW0gYWN0aW9uQnV0dG9uXG4gKiBAcGFyYW0gcG9pbnRlckV2ZW50VHlwZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9pbnRlckV2ZW50QWN0aXZlKFxuICBlbnRpdHk6IEVudGl0eSxcbiAgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24sXG4gIHBvaW50ZXJFdmVudFR5cGU6IFBvaW50ZXJFdmVudFR5cGVcbikge1xuICBpZiAoIWlzUG9pbnRlckV2ZW50QWN0aXZlRnVuYykge1xuICAgIGlzUG9pbnRlckV2ZW50QWN0aXZlRnVuYyA9IGlzUG9pbnRlckV2ZW50QWN0aXZlR2VuZXJhdG9yKGVuZ2luZSlcbiAgfVxuICByZXR1cm4gaXNQb2ludGVyRXZlbnRBY3RpdmVGdW5jKGVudGl0eSwgYWN0aW9uQnV0dG9uLCBwb2ludGVyRXZlbnRUeXBlKVxufVxuIiwiaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcydcblxuLyoqXG4gKiBUcmFuc2Zvcm0gcGFyZW50aW5nOiBjeWNsaWMgZGVwZW5kZW5jeSBjaGVja2VyXG4gKiBJdCBjaGVja3Mgb25seSBpbiBtb2RpZmllZCBUcmFuc2Zvcm1zXG4gKlxuICogQWRkIHRoaXMgc3lzdGVtIHdpdGg6XG4gKiBgYGB0c1xuICogIGVuZ2luZS5hZGRTeXN0ZW0oY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmUpKVxuICogYGBgYFxuICogQW5kIHRoZW4gaXQgd2lsbCBjaGVjayBldmVyeSB0aWNrIHRoZSBwYXJlbnRpbmcuXG4gKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbXMgZW5naW5lXG4gKiBAcmV0dXJucyBhIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIFRyYW5zZm9ybS5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgIGxldCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgIHdoaWxlICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtLnBhcmVudCkge1xuICAgICAgICBpZiAodHJhbnNmb3JtLnBhcmVudCA9PT0gZW50aXR5KSB7XG4gICAgICAgICAgZGNsLmVycm9yKGBUaGVyZSBpcyBhIGN5Y2xpYyBwYXJlbnQgd2l0aCBlbnRpdHkgJHtlbnRpdHl9YClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPck51bGwodHJhbnNmb3JtLnBhcmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVHJhbnNmb3JtXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEFuaW1hdG9yID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkFuaW1hdG9yXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhckF0dGFjaCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJBdHRhY2hcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyTW9kaWZpZXJBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhck1vZGlmaWVyQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQmlsbGJvYXJkXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJveFNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlQXJlYSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkN5bGluZGVyU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNYXRlcmlhbCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NYXRlcmlhbFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNZXNoQ29sbGlkZXIgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWVzaENvbGxpZGVyXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTkZUU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTkZUU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93biA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUG9pbnRlckV2ZW50cyA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyRXZlbnRzXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJFdmVudHNSZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckV2ZW50c1Jlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQb2ludGVyTG9jayA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyTG9ja1xuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBSYXljYXN0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlJheWNhc3Rcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUmF5Y2FzdFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5SYXljYXN0UmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFNwaGVyZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlNwaGVyZVNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFRleHRTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5UZXh0U2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVWlUZXh0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVGV4dFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBVaVRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5VaVRyYW5zZm9ybVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29tcG9uZW50ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlZpc2liaWxpdHlDb21wb25lbnRcbiIsImltcG9ydCB7IGVuZ2luZSB9IGZyb20gJy4uLy4uL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24nXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IG5hbWVzcGFjZSBDb21wb25lbnRzIHtcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5UcmFuc2Zvcm1cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEFuaW1hdG9yID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkFuaW1hdG9yXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdWRpb1NvdXJjZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhckF0dGFjaFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQXZhdGFyTW9kaWZpZXJBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhck1vZGlmaWVyQXJlYVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQXZhdGFyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEJpbGxib2FyZCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5CaWxsYm9hcmRcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEJveFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJveFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBDYW1lcmFNb2RlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkNhbWVyYU1vZGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkNhbWVyYU1vZGVBcmVhXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkN5bGluZGVyU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEdMVEZTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5HTFRGU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1hdGVyaWFsID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1hdGVyaWFsXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBNZXNoQ29sbGlkZXIgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWVzaENvbGxpZGVyXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBNZXNoUmVuZGVyZXIgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWVzaFJlbmRlcmVyXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBORlRTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5ORlRTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyRG93biA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25SZXN1bHRcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFJlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUGxhbmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5QbGFuZVNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQb2ludGVyRXZlbnRzID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJFdmVudHNcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBvaW50ZXJFdmVudHNSZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckV2ZW50c1Jlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUG9pbnRlckxvY2sgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckxvY2tcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFJheWNhc3QgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUmF5Y2FzdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUmF5Y2FzdFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5SYXljYXN0UmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5TcGhlcmVTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVWlUZXh0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVGV4dFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVWlUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUcmFuc2Zvcm1cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVmlzaWJpbGl0eUNvbXBvbmVudFxufVxuIl0sIm5hbWVzIjpbInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInRoaXMiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsImdsb2JhbCIsIl9tMCIsIkNPTVBPTkVOVF9JRCIsImxvbmdUb051bWJlciIsImdsb2JhbFRoaXMiLCJMb25nIiwiQW5pbWF0b3JTY2hlbWEuQW5pbWF0b3JTY2hlbWEiLCJBbmltYXRvclNjaGVtYS5DT01QT05FTlRfSUQiLCJBdWRpb1NvdXJjZVNjaGVtYS5BdWRpb1NvdXJjZVNjaGVtYSIsIkF1ZGlvU291cmNlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhckF0dGFjaFNjaGVtYS5BdmF0YXJBdHRhY2hTY2hlbWEiLCJBdmF0YXJBdHRhY2hTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSIsIkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJTaGFwZVNjaGVtYS5BdmF0YXJTaGFwZVNjaGVtYSIsIkF2YXRhclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkJpbGxib2FyZFNjaGVtYS5CaWxsYm9hcmRTY2hlbWEiLCJCaWxsYm9hcmRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQm94U2hhcGVTY2hlbWEuQm94U2hhcGVTY2hlbWEiLCJCb3hTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJDYW1lcmFNb2RlU2NoZW1hLkNhbWVyYU1vZGVTY2hlbWEiLCJDYW1lcmFNb2RlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkNhbWVyYU1vZGVBcmVhU2NoZW1hLkNhbWVyYU1vZGVBcmVhU2NoZW1hIiwiQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ3lsaW5kZXJTaGFwZVNjaGVtYS5DeWxpbmRlclNoYXBlU2NoZW1hIiwiQ3lsaW5kZXJTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJHTFRGU2hhcGVTY2hlbWEuR0xURlNoYXBlU2NoZW1hIiwiR0xURlNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk1hdGVyaWFsU2NoZW1hLk1hdGVyaWFsU2NoZW1hIiwiTWF0ZXJpYWxTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWVzaENvbGxpZGVyU2NoZW1hLk1lc2hDb2xsaWRlclNjaGVtYSIsIk1lc2hDb2xsaWRlclNjaGVtYS5DT01QT05FTlRfSUQiLCJNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hIiwiTWVzaFJlbmRlcmVyU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk5GVFNoYXBlU2NoZW1hLk5GVFNoYXBlU2NoZW1hIiwiTkZUU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyRG93blNjaGVtYS5PblBvaW50ZXJEb3duU2NoZW1hIiwiT25Qb2ludGVyRG93blNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEiLCJPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlclVwU2NoZW1hLk9uUG9pbnRlclVwU2NoZW1hIiwiT25Qb2ludGVyVXBTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEiLCJPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQiLCJQbGFuZVNoYXBlU2NoZW1hLlBsYW5lU2hhcGVTY2hlbWEiLCJQbGFuZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBvaW50ZXJFdmVudHNTY2hlbWEuUG9pbnRlckV2ZW50c1NjaGVtYSIsIlBvaW50ZXJFdmVudHNTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYS5Qb2ludGVyRXZlbnRzUmVzdWx0U2NoZW1hIiwiUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQiLCJQb2ludGVyTG9ja1NjaGVtYS5Qb2ludGVyTG9ja1NjaGVtYSIsIlBvaW50ZXJMb2NrU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlJheWNhc3RTY2hlbWEuUmF5Y2FzdFNjaGVtYSIsIlJheWNhc3RTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUmF5Y2FzdFJlc3VsdFNjaGVtYS5SYXljYXN0UmVzdWx0U2NoZW1hIiwiUmF5Y2FzdFJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQiLCJTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSIsIlNwaGVyZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlRleHRTaGFwZVNjaGVtYS5UZXh0U2hhcGVTY2hlbWEiLCJUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSIsIlVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQiLCJVaVRyYW5zZm9ybVNjaGVtYS5VaVRyYW5zZm9ybVNjaGVtYSIsIlVpVHJhbnNmb3JtU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYSIsIlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiU2NoZW1hcyIsImlJbnQ2NCIsIldpcmVNZXNzYWdlIiwiY3JkdFByb3RvY29sIiwiTWVzc2FnZSIsImRlZkNvbXBvbmVudCIsImRlZmluZUNvbXBvbmVudCIsIkNvbXBvbmVudHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQSxPQUFBLEVBQVUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7R0FDOUQsT0FBa0IsQ0FBQSxPQUFBLEdBQUEsS0FBSyxDQUFDLENBQUM7R0FLekIsQ0FBQyxVQUFV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QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQ25GLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RjtDQUNULFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDLFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDLFVBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDO0NBQ2pDO0NBQ0EsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbkQsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbkQsVUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7V0FDM0MsT0FBTyxHQUFHLENBQUM7UUFDZDtDQUNMLE1BQUksVUFBVSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7Q0FDekM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNqRTtDQUNBLFVBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztDQUN0QyxVQUFRLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDbEMsVUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1dBQzVCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1dBQzlCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7V0FDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztXQUM3QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3RDLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMxQztDQUNMLE1BQUksVUFBVSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0NBQ3JFO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtDQUNyRCxVQUFRLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7Q0FDL0I7V0FDUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMzRDtXQUNRLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1dBQzlCLElBQUksQ0FBQyxDQUFDO0NBQ2QsVUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Q0FDdkIsY0FBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzdDLGNBQVksTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2VBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztlQUMzQixNQUFNLENBQUMsQ0FBQyxH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RyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtVQUNRLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDcEQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsYUFB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LENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksT0FBTyxDQUFDO0NBQzlILGNBQVksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUM1QyxjQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEM7Q0FDVCxjQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUM3RixVQUFRLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRTtlQUNWLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7ZUFDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNUO1FBQ0o7T0FDRCxJQUFJLEtBQUssRUFBRTtDQUNmLFVBQVEsSUFBSSxDQUFDO2VBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdFLFVBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCO0NBQ0wsTUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO09BQ3JELElBQUksS0FBSyxHQUFHLE1BQU07Q0FDdEIsVUFBUSxFQUFFO0NBQ1YsVUFBUSxFQUFFLENBQUM7Q0FDWCxNQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1dBQ3BDLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLFVBQVEsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFO0NBQ3RCLGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0NBQ2xDLFdBQVMsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUU7ZUFDbEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUM7ZUFDdkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDMUMsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLE1BQU0sTUFBTSxFQUFFO0NBQ3RHLGNBQVksRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2VBQ3JELEVBQUUsQ0FBQyxDQUFDO2VBQ0osTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUM7Q0FDbkQsY0FBWSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Q0FDbkQsY0FBWSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7ZUFDdkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7Q0FDbkQsV0FBUyxNQUFNO2VBQ0gsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUM7Q0FDbkQsY0FBWSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUM7ZUFDdkMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDMUM7UUFDSjtDQUNMLE1BQUksT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUE7Ozs7Ozs7Ozs7O0NDdkdELENBQWMsTUFBQSxHQUFHLElBQUksQ0FBQztBQUN0QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Q0FDbEMsS0FBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDO0NBQzlCLEtBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQztDQUM1QixLQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQztDQUN0QixLQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0QixLQUFJLE9BQU8sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0NBQ3JDLFNBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHO0NBQ2xDLGFBQVksT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDL0IsU0FBUSxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO0NBQ2xDLGFBQVksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztjQUNuQixNQUFNLEdBQUcsQ0FBQyxDQUFDO1dBQ2Q7Q0FDVCxTQUFRLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUM7VUFDbkQsSUFBSSxNQUFNLEdBQUcsQ0FBQztjQUNWLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQzlCLE9BQU8sR0FBRyxDQUFDO0NBQ25CLE1BQUssQ0FBQztDQUNOLEVBQUE7Ozs7Ozs7Ozs7Q0M5Q0EsQ0FBYyxRQUFBLEdBQUcsUUFBUSxDQUFDO0FBQzFCO0VBQ0EsSUFBSSxJQUFJLEdBQUdKLGdCQUFBLEVBQTBCLENBQUM7QUFDdEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzFCO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7R0FDdEI7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0VBQ0EsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3pDLENBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7RUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3ZDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztBQUN0RDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxVQUFVLEdBQUcsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO01BQzdDLElBQUksS0FBSyxLQUFLLENBQUM7VUFDWCxPQUFPLElBQUksQ0FBQztDQUNwQixLQUFJLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7Q0FDekIsS0FBSSxJQUFJLElBQUk7Q0FDWixTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQztDQUN2QixLQUFJLElBQUksRUFBRSxHQUFHLEtBQUssS0FBSyxDQUFDO1VBQ2hCLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQztNQUN6QyxJQUFJLElBQUksRUFBRTtDQUNkLFNBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztDQUN2QixTQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDdkIsU0FBUSxJQUFJLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRTtjQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25CLGFBQVksSUFBSSxFQUFFLEVBQUUsR0FBRyxVQUFVO2tCQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQ2Q7T0FDSjtNQUNELE9BQU8sSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hDLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUU7Q0FDckMsS0FBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7Q0FDakMsU0FBUSxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Q0FDMUMsS0FBSSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDOUI7VUFDUSxJQUFJLElBQUksQ0FBQyxJQUFJO2NBQ1QsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ2hEO0NBQ0EsYUFBWSxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZEO01BQ0QsT0FBTyxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDNUYsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsUUFBUSxFQUFFO01BQ3RELElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7VUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDO2NBQ3ZCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1VBQzVCLElBQUksQ0FBQyxFQUFFO0NBQ2YsYUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7VUFDdEIsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7T0FDbEM7TUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUM7Q0FDMUMsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsUUFBUSxFQUFFO01BQ2xELE9BQU8sSUFBSSxDQUFDLElBQUk7WUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3BFO1lBQ1UsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztDQUMvRSxFQUFDLENBQUM7QUFDRjtDQUNBLENBQUEsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7QUFDN0M7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRTtNQUN4QyxJQUFJLElBQUksS0FBSyxRQUFRO1VBQ2pCLE9BQU8sSUFBSSxDQUFDO01BQ2hCLE9BQU8sSUFBSSxRQUFRO1VBQ2YsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQy9DO1VBQ1EsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQy9DLE1BQUssQ0FBQztDQUNOLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxHQUFHO01BQzFDLE9BQU8sTUFBTSxDQUFDLFlBQVk7Q0FDOUIsU0FBUSxJQUFJLENBQUMsRUFBRSxVQUFVLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QixTQUFRLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO0NBQ3RCLE1BQUssQ0FBQztDQUNOLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO01BQzlDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO01BQzNCLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7Q0FDOUQsS0FBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxDQUFDO01BQzFELE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO01BQzlDLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0NBQzlELEtBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRztDQUM5QyxLQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO0NBQ3hCLFNBQVEsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUNyRCxTQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztNQUM1QixPQUFPLEtBQUssS0FBSyxDQUFDO2FBQ1gsS0FBSyxLQUFLLENBQUM7ZUFDVCxLQUFLLEdBQUcsS0FBSztDQUMxQixnQkFBZSxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0NBQ2xDLGdCQUFlLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUM7ZUFDekIsS0FBSyxHQUFHLEtBQUs7Q0FDMUIsZ0JBQWUsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztDQUNsQyxnQkFBZSxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0NBQ3RDLFlBQVcsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0dBQy9CLENBQUE7Ozs7Ozs7Ozs7R0N0TUQsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxTQUFTLEdBQUdBLGdCQUFBLEVBQWdDLENBQUM7QUFDbEQ7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE1BQU0sR0FBR0MsYUFBQSxFQUE2QixDQUFDO0FBQzVDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxZQUFZLEdBQUdDLG1CQUFBLEVBQW1DLENBQUM7QUFDeEQ7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLEtBQUssR0FBR0UsWUFBQSxFQUE0QixDQUFDO0FBQzFDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxPQUFPLEdBQUdDLGNBQUEsRUFBOEIsQ0FBQztBQUM5QztDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHQyxXQUFBLEVBQTJCLENBQUM7QUFDeEM7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLElBQUksR0FBR0MsV0FBQSxFQUEyQixDQUFDO0FBQ3hDO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxRQUFRLEdBQUdDLGVBQUEsRUFBcUIsQ0FBQztBQUN0QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPQyxjQUFNLEtBQUssV0FBVztDQUNuRCx3QkFBc0JBLGNBQU07eUJBQ05BLGNBQU0sQ0FBQyxPQUFPO0NBQ3BDLHdCQUFzQkEsY0FBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRO3lCQUN2QkEsY0FBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUlBLGNBQU07Q0FDbkMsZ0JBQWMsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU07Q0FDckQsZ0JBQWMsT0FBTyxJQUFJLE9BQU8sV0FBVyxJQUFJLElBQUk7Q0FDbkQsZ0JBQWNOLGNBQUksQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLDhCQUE4QixFQUFFLENBQUM7QUFDcEY7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsOEJBQThCLEVBQUUsQ0FBQztBQUNyRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsK0JBQStCLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtDQUMxRixNQUFJLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztDQUN2RixHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO09BQ3JDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7Q0FDaEUsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtDQUN6QyxNQUFJLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztDQUM5QyxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxLQUFLO0FBQ1Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7Q0FDdkMsTUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDdEIsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO0NBQ2pELFVBQVEsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO09BQzlHLE9BQU8sS0FBSyxDQUFDO0NBQ2pCLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVc7Q0FDMUIsTUFBSSxJQUFJO1dBQ0EsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7Q0FDbkQ7V0FDUSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sOEJBQThCLElBQUksQ0FBQztRQUNoRixDQUFDLE9BQU8sQ0FBQyxFQUFFO0NBQ2hCO1dBQ1EsT0FBTyxJQUFJLENBQUM7UUFDZjtDQUNMLEdBQUMsR0FBRyxDQUFDO0FBQ0w7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekI7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNoQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxTQUFTLENBQUMsV0FBVyxFQUFFO0NBQ2pEO0NBQ0EsTUFBSSxPQUFPLE9BQU8sV0FBVyxLQUFLLFFBQVE7YUFDaEMsSUFBSSxDQUFDLE1BQU07Q0FDckIsZ0JBQWMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztDQUNuRCxnQkFBYyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO2FBQy9CLElBQUksQ0FBQyxNQUFNO0NBQ3JCLGdCQUFjLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO2lCQUM5QixPQUFPLFVBQVUsS0FBSyxXQUFXO0NBQy9DLG9CQUFrQixXQUFXO0NBQzdCLG9CQUFrQixJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztDQUM5QyxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLFVBQVUsS0FBSyxXQUFXLEdBQUcsVUFBVSw4QkFBOEIsS0FBSyxDQUFDO0FBQy9GO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxJQUFJLDhCQUE4QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sK0JBQStCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUk7Q0FDakgseUNBQXVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtDQUN2RCxjQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO0FBQ2pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztBQUN2QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsNENBQTRDLENBQUM7QUFDNUQ7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtDQUM3QyxNQUFJLE9BQU8sS0FBSzthQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtDQUM1QyxZQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0NBQ2pDLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO09BQ3RELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3hDLElBQUksSUFBSSxDQUFDLElBQUk7Q0FDakIsVUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztPQUMxRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Q0FDNUMsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtPQUMvQixLQUFLLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Q0FDakUsVUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxRQUFRO0NBQ25ELGNBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUNwQyxPQUFPLEdBQUcsQ0FBQztJQUNkO0FBQ0Q7Q0FDQSxFQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Q0FDckMsTUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMxRCxHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRTtBQUN4QjtDQUNBLE1BQUksU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtBQUM5QztDQUNBLFVBQVEsSUFBSSxFQUFFLElBQUksWUFBWSxXQUFXLENBQUM7ZUFDOUIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQ7Q0FDQTtDQUNBO0FBQ0E7Q0FDQSxVQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RjtDQUNBO1dBQ1EsSUFBSSxLQUFLLENBQUMsaUJBQWlCO2VBQ3ZCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Q0FDdkQ7ZUFDWSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRjtDQUNBLFVBQVEsSUFBSSxVQUFVO0NBQ3RCLGNBQVksS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQjtBQUNMO0NBQ0EsTUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUN2RjtPQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0Y7T0FDSSxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztXQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Q0FDL0MsT0FBSyxDQUFDO0FBQ047T0FDSSxPQUFPLFdBQVcsQ0FBQztJQUN0QjtBQUNEO0NBQ0EsRUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQy9DO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsUUFBUSxDQUFDLFVBQVUsRUFBRTtDQUNqRCxNQUFJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztDQUN0QixNQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztXQUN0QyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksT0FBTyxXQUFXO1dBQ2QsS0FBSyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0NBQzNFLGNBQVksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7Q0FDaEcsa0JBQWdCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CLE9BQUssQ0FBQztDQUNOLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxRQUFRLENBQUMsVUFBVSxFQUFFO0FBQ2pEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksT0FBTyxTQUFTLElBQUksRUFBRTtDQUMxQixVQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztDQUNsRCxjQUFZLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7bUJBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNDLE9BQUssQ0FBQztDQUNOLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxJQUFJLENBQUMsYUFBYSxHQUFHO09BQ2pCLEtBQUssRUFBRSxNQUFNO09BQ2IsS0FBSyxFQUFFLE1BQU07T0FDYixLQUFLLEVBQUUsTUFBTTtPQUNiLElBQUksRUFBRSxJQUFJO0NBQ2QsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtHQUNBLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVztDQUM3QixNQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Q0FDN0I7T0FDSSxJQUFJLENBQUMsTUFBTSxFQUFFO1dBQ1QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0NBQzVELFVBQVEsT0FBTztRQUNWO0NBQ0w7Q0FDQTtDQUNBLE1BQUksSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUk7Q0FDdEU7Q0FDQSxVQUFRLFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7ZUFDbEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Q0FDL0MsV0FBUyxDQUFDO0NBQ1YsTUFBSSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLFdBQVc7Q0FDakQ7Q0FDQSxVQUFRLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0NBQzFDLGNBQVksT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNwQyxXQUFTLENBQUM7SUFDVCxDQUFBOzs7Ozs7Ozs7OztDQ25hRCxDQUFjLE1BQUEsR0FBRyxNQUFNLENBQUM7QUFDeEI7RUFDQSxJQUFJLElBQUksUUFBUUgsZ0JBQUEsRUFBeUIsQ0FBQztBQUMxQztDQUNBLENBQUEsSUFBSSxZQUFZLENBQUM7QUFDakI7Q0FDQSxDQUFBLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO0NBQzdCLEtBQUksTUFBTSxNQUFNLElBQUksQ0FBQyxNQUFNO0NBQzNCLEtBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0dBQ2xCO0FBQ0Q7Q0FDQTtFQUNBLFNBQVMsSUFBSSxHQUFHLEVBQUU7QUFDbEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztHQUM3QjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxNQUFNLEdBQUc7QUFDbEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FD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QUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsK0JBQStCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNqSDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLFNBQVMsaUJBQWlCLEdBQUc7Q0FDeEQsS0FBSSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUM7TUFDdkIsT0FBTyxTQUFTLFdBQVcsR0FBRztDQUNsQyxTQUFRLEtBQUssR0FBRyxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQy9HLFNBQVEsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQy9HLFNBQVEsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQy9HLFNBQVEsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUs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QUFDdEI7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEI7RUFDQSxJQUFJO0NBQ0osR0FBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQztDQUN4RSxLQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7Q0FDaG9DLElBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO0dBQ2xCLENBQUMsT0FBTyxDQUFDLEVBQUU7Q0FDWjtHQUNDO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7R0FDOUI7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLElBQUksQ0FBQyxTQUFTLENBQUMs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QUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JCLEtBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUM7TUFDbEIsR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUNsQixLQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO01BQ3JELEdBQUcsSUFBSSxNQUFNLENBQUM7TUFDZCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQ3pFLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxhQUFhLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7QUFDM0M7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FD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QUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDcEUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTthQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ3BFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7YUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNuRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLEVBQUU7Q0FDN0MsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtDQUN0RCxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQywwQkFBMEIsS0FBSyxTQUFTLEVBQUU7Q0FDcEQsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtDQUM1RCxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO0NBQ2pDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLEtBQUssTUFBTSxDQUFDLElB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NUYsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0NBQ3hCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7YUFDN0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNsRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7Q0FDM0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDM0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtDQUNoQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN4QyxTQUFBO0NBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZSxFQUFBO1NBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWUEsY0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSUEsY0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMxRSxRQUFBLElB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LENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Q0FDMUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtDQUN0QyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0NBQ3BDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDNUMsU0FBQTtD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Q0FDdkIsWUFBQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDL0I7Q0FDRCxRQUFBLFVBQVUsQ0FBQyxNQUFjLEVBQUE7Q0FDdkIsWUFBQSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDL0I7Q0FDRCxRQUFBLE9BQU8sQ0FBQyxNQUFjLEVBQUE7Q0FDcEIsWUFBQSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDNUI7Q0FDRCxRQUFBLFFBQVEsQ0FBQyxNQUFjLEVBQUE7Q0FDckIsWUFBQSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDN0I7Q0FDRCxRQUFBLFFBQVEsQ0FBQyxNQUFjLEVBQUE7Q0FDckIsWUFBQSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDN0I7Q0FDRCxRQUFBLFFBQVEsQ0FBQyxNQUFjLEVBQUE7Q0FDckIsWUFBQSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDaEM7Q0FDRCxRQUFBLFFBQVEsQ0FBQyxNQUFjLEVBQUE7Q0FDckIsWUFBQSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDN0I7Q0FDRCxRQUFBLFNBQVMsQ0FBQyxNQUFjLEVBQUE7Q0FDdEIsWUFBQSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDOUI7Q0FDRCxRQUFBLFNBQVMsQ0FBQyxNQUFjLEVBQUE7Q0FDdEIsWUFBQSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDOUI7Q0FDRCxRQUFBLFNBQVMsQ0FBQyxNQUFjLEVBQUE7Q0FDdEIsWUFBQSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDakM7U0FDRCxVQUFVLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBQTtDQUN0QyxZQUFBLElBQUksQ0FBQyxVQUFV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
|
11470
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoQ29sbGlkZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hDb2xsaWRlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL09uUG9pbnRlclVwLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXBSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BvaW50ZXJFdmVudHMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1JheWNhc3RSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Qb2ludGVyTG9jay5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUmF5Y2FzdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUmF5Y2FzdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvUmF5Y2FzdFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUZXh0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1VpVHJhbnNmb3JtLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRyYW5zZm9ybS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaW5kZXguZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvbGVnYWN5L1RyYW5zZm9ybS50cyIsIi4uL3NyYy9jb21wb25lbnRzL2luZGV4LnRzIiwiLi4vc3JjL3NjaGVtYXMvQXJyYXkudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9Cb29sZWFuLnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvRW51bS50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0Zsb2F0LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvSW50ZWdlci50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL1N0cmluZy50cyIsIi4uL3NyYy9zY2hlbWFzL01hcC50cyIsIi4uL3NyYy9zY2hlbWFzL09wdGlvbmFsLnRzIiwiLi4vc3JjL3NjaGVtYXMvaW5kZXgudHMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRjbC9jcmR0L2Rpc3QvaW5kZXguanMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyL2luZGV4LnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UudHMiLCIuLi9zcmMvc2VyaWFsaXphdGlvbi9jcmR0L2NvbXBvbmVudE9wZXJhdGlvbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvaW5kZXgudHMiLCIuLi9zcmMvZW5naW5lL3JlYWRvbmx5LnRzIiwiLi4vc3JjL2VuZ2luZS9jb21wb25lbnQudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS11dGlscy50cyIsIi4uL3NyYy9lbmdpbmUvZW50aXR5LnRzIiwiLi4vc3JjL2VuZ2luZS9zeXN0ZW1zLnRzIiwiLi4vc3JjL2VuZ2luZS9pbmRleC50cyIsIi4uL3NyYy9lbmdpbmUvZXZlbnRzLnRzIiwiLi4vc3JjL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQudHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyIsIi4uL3NyYy9ydW50aW1lL3RlbXAtZnAvT2JzZXJ2YWJsZS50cyIsIi4uL3NyYy9ydW50aW1lL29ic2VydmFibGVzLnRzIiwiLi4vc3JjL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jeWNsaWNQYXJlbnRpbmdDaGVja2VyLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2dsb2JhbC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvZ2xvYmFsLm5hbWVzcGFjZS5nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZlY3RvcjMgPSB2b2lkIDA7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFZlY3RvcjM7XG4oZnVuY3Rpb24gKFZlY3RvcjMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqL1xuICAgIHggPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKi9cbiAgICB5ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICB6ID0gMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6IH07XG4gICAgfVxuICAgIFZlY3RvcjMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHZlY3RvcjEgLSB0aGUgZmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHZlY3RvcjIgLSB0aGUgc2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHZlY3RvcjEsIHZlY3RvcjIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHZlY3RvcjEueCArIHZlY3RvcjIueCxcbiAgICAgICAgICAgIHk6IHZlY3RvcjEueSArIHZlY3RvcjIueSxcbiAgICAgICAgICAgIHo6IHZlY3RvcjEueiArIHZlY3RvcjIuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueCxcbiAgICAgICAgICAgIHk6IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueSxcbiAgICAgICAgICAgIHo6IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdFRvUmVmKG1pbnVlbmQsIHN1YnRyYWhlbmQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnk7XG4gICAgICAgIHJlc3VsdC56ID0gbWludWVuZC56IC0gc3VidHJhaGVuZC56O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0VG9SZWYgPSBzdWJ0cmFjdFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBvdGhlciBzaWduXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcHBvc2l0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB4OiAtdmFsdWUueCwgeTogLXZhbHVlLnksIHo6IC12YWx1ZS56IH07XG4gICAgfVxuICAgIFZlY3RvcjMub3Bwb3NpdGUgPSBvcHBvc2l0ZTtcbiAgICAvKipcbiAgICAgKiBDb3B5IHNvdXJjZSBpbnRvIGRlc3RcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHkoc291cmNlLCBkZXN0KSB7XG4gICAgICAgIGRlc3QueCA9IHNvdXJjZS54O1xuICAgICAgICBkZXN0LnkgPSBzb3VyY2UueTtcbiAgICAgICAgZGVzdC56ID0gc291cmNlLno7XG4gICAgfVxuICAgIFZlY3RvcjMuY29weSA9IGNvcHk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIHNhbWUgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5jbG9uZSA9IGNsb25lO1xuICAgIC8vIFByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0bzNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLno7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGVUb1JlZih2ZWN0b3IsIHNjYWxlLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSB2ZWN0b3IueCAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueSA9IHZlY3Rvci55ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC56ID0gdmVjdG9yLnogKiBzY2FsZTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZVRvUmVmID0gc2NhbGVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZSh2ZWN0b3IsIHNjYWxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUodmVjdG9yLnggKiBzY2FsZSwgdmVjdG9yLnkgKiBzY2FsZSwgdmVjdG9yLnogKiBzY2FsZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGUgPSBzY2FsZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoID0gbm9ybWFsaXplRnJvbUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCB8fCBsZW4gPT09IDEuMCkge1xuICAgICAgICAgICAgY29weSh2ZWN0b3IsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVUb1JlZih2ZWN0b3IsIDEuMCAvIGxlbiwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYgPSBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWY7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuZ3RoKHZlY3RvcikpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvUmVmKHZlY3RvciwgcmVzdWx0KSB7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZVRvUmVmID0gbm9ybWFsaXplVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUm90YXRlcyBjdXJyZW50IFZlY3RvcjMgYmFzZWQgb24gdGhlIGdpdmVuIHF1YXRlcm5pb24sIGJ1dCBhcHBsaWVzIHRoZSByb3RhdGlvbiB0byB0YXJnZXQgVmVjdG9yMy5cbiAgICAgKiBAcGFyYW0gcSAtIGRlZmluZXMgdGhlIFF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlKHZlY3RvciwgcSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHogfSA9IHZlY3RvcjtcbiAgICAgICAgY29uc3QgeyB4OiBxeCwgeTogcXksIHo6IHF6LCB3OiBxdyB9ID0gcTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5LFxuICAgICAgICAgICAgeTogaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xeixcbiAgICAgICAgICAgIHo6IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5yb3RhdGUgPSByb3RhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgdmVjdG9ycyBcInN0YXJ0XCIgYW5kIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwID0gbGVycDtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZyb20gdGhlIHZlY3RvciBcInN0YXJ0XCIgZm9yIFwiYW1vdW50XCIgdG8gdGhlIHZlY3RvciBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueSA9IHN0YXJ0LnkgKyAoZW5kLnkgLSBzdGFydC55KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnogPSBzdGFydC56ICsgKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycFRvUmVmID0gbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3MobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmVjdG9yMy5aZXJvKCk7XG4gICAgICAgIFZlY3RvcjMuY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zcyA9IGNyb3NzO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC55ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC56ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3NUb1JlZiA9IGNyb3NzVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5aZXJvID0gWmVybztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVuaXQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIE9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDEuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5PbmUgPSBPbmU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0b2xlbmd0aFNxdWFyZWQgKDAuMCwgMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdXAgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVwKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlVwID0gVXA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAtMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRG93bigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIC0xLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRG93biA9IERvd247XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBGb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkZvcndhcmQgPSBGb3J3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAtMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhY2t3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAtMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5CYWNrd2FyZCA9IEJhY2t3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgcmlnaHQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlJpZ2h0ID0gUmlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoLTEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgbGVmdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgtMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuTGVmdCA9IExlZnQ7XG59KShWZWN0b3IzID0gZXhwb3J0cy5WZWN0b3IzIHx8IChleHBvcnRzLlZlY3RvcjMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVjdG9yMy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2NhbGFyID0gdm9pZCAwO1xuLyoqXG4gKiBUd28gcGkgY29uc3RhbnRzIGNvbnZlbmllbnQgZm9yIGNvbXB1dGF0aW9uLlxuICovXG5jb25zdCBUd29QaSA9IE1hdGguUEkgKiAyO1xuLyoqXG4gKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHBhcmFtIGEgLSBudW1iZXJcbiAqIEBwYXJhbSBiIC0gbnVtYmVyXG4gKiBAcGFyYW0gZXBzaWxvbiAtIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICovXG5mdW5jdGlvbiB3aXRoaW5FcHNpbG9uKGEsIGIsIGVwc2lsb24gPSAxLjQwMTI5OGUtNDUpIHtcbiAgICBjb25zdCBudW0gPSBhIC0gYjtcbiAgICByZXR1cm4gLWVwc2lsb24gPD0gbnVtICYmIG51bSA8PSBlcHNpbG9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICogQHBhcmFtIGkgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqL1xuZnVuY3Rpb24gdG9IZXgoaSkge1xuICAgIGNvbnN0IHN0ciA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChpIDw9IDE1KSB7XG4gICAgICAgIHJldHVybiAoJzAnICsgc3RyKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG4vKipcbiAqIFJldHVybnMgLTEgaWYgdmFsdWUgaXMgbmVnYXRpdmUgYW5kICsxIGlzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICogQHBhcmFtIF92YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFsIHRvIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcbiAgICBpZiAoX3ZhbHVlID09PSAwIHx8IGlzTmFOKF92YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWx1ZSA+IDAgPyAxIDogLTE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGJldHdlZW4gbWluIGFuZCBtYXguXG4gKiBSZXR1cm5zIG1pbiBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBtaW4uXG4gKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjbG1hcFxuICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0gbWF4IC0gdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSlcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuLyoqXG4gKiB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2ZcbiAqIEByZXR1cm5zIHRoZSBsb2cyIG9mIHZhbHVlLlxuICovXG5mdW5jdGlvbiBsb2cyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHZhbHVlKSAqIE1hdGguTE9HMkU7XG59XG4vKipcbiAqIExvb3BzIHRoZSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9kdWxvIG9wZXJhdG9yIGJ1dCBpdCB3b3JrcyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gKiBGb3IgZXhhbXBsZSwgdXNpbmcgMy4wIGZvciB0IGFuZCAyLjUgZm9yIGxlbmd0aCwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjUuXG4gKiBXaXRoIHQgPSA1IGFuZCBsZW5ndGggPSAyLjUsIHRoZSByZXN1bHQgd291bGQgYmUgMC4wLlxuICogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgYmVoYXZpb3VyIGlzIG5vdCBkZWZpbmVkIGZvciBuZWdhdGl2ZSBudW1iZXJzIGFzIGl0IGlzIGZvciB0aGUgbW9kdWxvIG9wZXJhdG9yXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSB0aGUgbGVuZ3RoXG4gKiBAcmV0dXJucyB0aGUgbG9vcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gTWF0aC5mbG9vcih2YWx1ZSAvIGxlbmd0aCkgKiBsZW5ndGg7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIERlbm9ybWFsaXplIHRoZSB2YWx1ZSBmcm9tIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG5vcm1hbGl6ZWQgLSB2YWx1ZSB0byBkZW5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBkZW5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVub3JtYWxpemUobm9ybWFsaXplZCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZCAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xlcyBnaXZlbiBpbiBkZWdyZWVzLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgYW5nbGUgaW4gZGVncmVlc1xuICogQHJldHVybnMgdGhlIGRlbHRhXG4gKi9cbmZ1bmN0aW9uIGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbi8qKlxuICogUGluZ1BvbmdzIHRoZSB2YWx1ZSB0LCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIGxlbmd0aFxuICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIDAgYW5kIGxlbmd0aFxuICovXG5mdW5jdGlvbiBwaW5nUG9uZyh0eCwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdCA9IHJlcGVhdCh0eCwgbGVuZ3RoICogMi4wKTtcbiAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG4vKipcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExlcnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwXG4gKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFuZCBvdGhlciB0cmFuc2l0aW9ucy5cbiAqIEBwYXJhbSBmcm9tIC0gZnJvbVxuICogQHBhcmFtIHRvIC0gdG9cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc21vb3RoIHN0ZXBwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gc21vb3RoU3RlcChmcm9tLCB0bywgdHgpIHtcbiAgICBsZXQgdCA9IGNsYW1wKHR4KTtcbiAgICB0ID0gLTIuMCAqIHQgKiB0ICogdCArIDMuMCAqIHQgKiB0O1xuICAgIHJldHVybiB0byAqIHQgKyBmcm9tICogKDEuMCAtIHQpO1xufVxuLyoqXG4gKiBNb3ZlcyBhIHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLlxuICogTmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRhcmdldC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKE1hdGguYWJzKHRhcmdldCAtIGN1cnJlbnQpIDw9IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyBzaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTW92ZVRvd2FyZHMgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICpcbiAqIFZhcmlhYmxlcyBjdXJyZW50IGFuZCB0YXJnZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy4gRm9yIG9wdGltaXphdGlvbiByZWFzb25zLCBuZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGFcbiAqICBhcmUgbm90IHN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIG9zY2lsbGF0aW9uLiBUbyBwdXNoIGN1cnJlbnQgYXdheSBmcm9tIGEgdGFyZ2V0IGFuZ2xlLCBhZGQgMTgwIHRvIHRoYXQgYW5nbGUgaW5zdGVhZC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyBhbmdsZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkc0FuZ2xlKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBjb25zdCBudW0gPSBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBtb3ZlVG93YXJkcyhjdXJyZW50LCBjdXJyZW50ICsgbnVtLCBtYXhEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NhbGFyIHdpdGggdmFsdWVzIGxpbmVhcmx5IGludGVycG9sYXRlZCBvZiBcImFtb3VudFwiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBhbW91bnQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTGVycCBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKiBUaGUgcGFyYW1ldGVyIHQgaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFdLiBWYXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnBBbmdsZShzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgbnVtICogY2xhbXAoYW1vdW50KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGluZWFyIHBhcmFtZXRlciB0IHRoYXQgcHJvZHVjZXMgdGhlIGludGVycG9sYW50IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgW2EsIGJdLlxuICogQHBhcmFtIGEgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGIgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGJldHdlZW4gYSBhbmQgYlxuICogQHJldHVybnMgdGhlIGludmVyc2VMZXJwIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGludmVyc2VMZXJwKGEsIGIsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgcmVzdWx0ID0gY2xhbXAoKHZhbHVlIC0gYSkgLyAoYiAtIGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IDAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBzY2FsYXIgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBIZXJtaXRlIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBzY2FsYXJzIFwidmFsdWUxXCIsIFwidmFsdWUzXCIsIFwidGFuZ2VudDFcIiwgXCJ0YW5nZW50MlwiLlxuICoge0BsaW5rIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vSGVybWl0ZVBvbHlub21pYWwuaHRtbH1cbiAqIEBwYXJhbSB2YWx1ZTEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlMiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gaW5wdXQgdmFsdWVcbiAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGhlcm1pdGUodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50MiwgYW1vdW50KSB7XG4gICAgY29uc3Qgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDtcbiAgICBjb25zdCBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDEgPSAyLjAgKiBjdWJlZCAtIDMuMCAqIHNxdWFyZWQgKyAxLjA7XG4gICAgY29uc3QgcGFydDIgPSAtMi4wICogY3ViZWQgKyAzLjAgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQzID0gY3ViZWQgLSAyLjAgKiBzcXVhcmVkICsgYW1vdW50O1xuICAgIGNvbnN0IHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkO1xuICAgIHJldHVybiB2YWx1ZTEgKiBwYXJ0MSArIHZhbHVlMiAqIHBhcnQyICsgdGFuZ2VudDEgKiBwYXJ0MyArIHRhbmdlbnQyICogcGFydDQ7XG59XG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZSBvZiByYW5kb21cbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWUgb2YgcmFuZG9tXG4gKiBAcmV0dXJucyByYW5kb20gdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmFuZ2UobWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUpXG4gKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKVxuICogQHBhcmFtIG51bSAtIHRvIGNvbnZlcnQgdG8gcGVyY2VudGFnZVxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIHBlcmNlbnRhZ2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1BlcmNlbnQobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobnVtIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBlcmNlbnRhZ2UgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBQZXJjZW50VG9SYW5nZSgwLjM0LDAsMTAwKSB3aWxsIHJldHVybiAzNC5cbiAqIEBwYXJhbSBwZXJjZW50IC0gdG8gY29udmVydCB0byBudW1iZXJcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gcGVyY2VudFRvUmFuZ2UocGVyY2VudCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG1heCAtIG1pbikgKiBwZXJjZW50ICsgbWluO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbmdsZSBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCB2YWx1ZSBiZXR3ZWVuIC1NYXRoLlBJIGFuZCBNYXRoLlBJIHJhZGlhbnMuXG4gKiBAcGFyYW0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplIGluIHJhZGlhbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgYW5nbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGUpIHtcbiAgICAvLyBNb3JlIHByZWNpc2UgYnV0IHNsb3dlciB2ZXJzaW9uIGtlcHQgZm9yIHJlZmVyZW5jZS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb21tZW50ZWQtb3V0LWNvZGVcbiAgICAvKlxuICAgICAgLy8gYW5nbGUgPSBhbmdsZSAlIFRvb2xzLlR3b1BpO1xuICAgICAgLy8gYW5nbGUgPSAoYW5nbGUgKyBUb29scy5Ud29QaSkgJSBUb29scy5Ud29QaTtcbiAgXG4gICAgICAvL2lmIChhbmdsZSA+IE1hdGguUEkpIHtcbiAgICAgIC8vXHRhbmdsZSAtPSBUb29scy5Ud29QaTtcbiAgICAgIC8vfVxuICAgICAgICAqL1xuICAgIHJldHVybiBhbmdsZSAtIFR3b1BpICogTWF0aC5mbG9vcigoYW5nbGUgKyBNYXRoLlBJKSAvIFR3b1BpKTtcbn1cbi8qKlxuICogU2NhbGFyIGNvbXB1dGF0aW9uIGxpYnJhcnlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5TY2FsYXIgPSB7XG4gICAgd2l0aGluRXBzaWxvbixcbiAgICB0b0hleCxcbiAgICBzaWduLFxuICAgIGNsYW1wLFxuICAgIGxvZzIsXG4gICAgcmVwZWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICBkZW5vcm1hbGl6ZSxcbiAgICBkZWx0YUFuZ2xlLFxuICAgIHBpbmdQb25nLFxuICAgIHNtb290aFN0ZXAsXG4gICAgbW92ZVRvd2FyZHMsXG4gICAgbW92ZVRvd2FyZHNBbmdsZSxcbiAgICBsZXJwLFxuICAgIGxlcnBBbmdsZSxcbiAgICBpbnZlcnNlTGVycCxcbiAgICBoZXJtaXRlLFxuICAgIHJhbmRvbVJhbmdlLFxuICAgIHJhbmdlVG9QZXJjZW50LFxuICAgIHBlcmNlbnRUb1JhbmdlLFxuICAgIG5vcm1hbGl6ZVJhZGlhbnMsXG4gICAgVHdvUGlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2FsYXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJBRDJERUcgPSBleHBvcnRzLkRFRzJSQUQgPSBleHBvcnRzLkVwc2lsb24gPSBleHBvcnRzLlRvTGluZWFyU3BhY2UgPSBleHBvcnRzLlRvR2FtbWFTcGFjZSA9IGV4cG9ydHMuU3BhY2UgPSBleHBvcnRzLk9yaWVudGF0aW9uID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZpbmVzIHBvdGVudGlhbCBvcmllbnRhdGlvbiBmb3IgYmFjayBmYWNlIGN1bGxpbmdcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE9yaWVudGF0aW9uO1xuKGZ1bmN0aW9uIChPcmllbnRhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENsb2Nrd2lzZVxuICAgICAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ1dcIl0gPSAwXSA9IFwiQ1dcIjtcbiAgICAvKiogQ291bnRlciBjbG9ja3dpc2UgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNDV1wiXSA9IDFdID0gXCJDQ1dcIjtcbn0pKE9yaWVudGF0aW9uID0gZXhwb3J0cy5PcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5PcmllbnRhdGlvbiA9IHt9KSk7XG4vKipcbiAqIERlZmluZXMgc3VwcG9ydGVkIHNwYWNlc1xuICogQHB1YmxpY1xuICovXG52YXIgU3BhY2U7XG4oZnVuY3Rpb24gKFNwYWNlKSB7XG4gICAgLyoqIExvY2FsIChvYmplY3QpIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJMT0NBTFwiXSA9IDBdID0gXCJMT0NBTFwiO1xuICAgIC8qKiBXb3JsZCBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiV09STERcIl0gPSAxXSA9IFwiV09STERcIjtcbiAgICAvKiogQm9uZSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiQk9ORVwiXSA9IDJdID0gXCJCT05FXCI7XG59KShTcGFjZSA9IGV4cG9ydHMuU3BhY2UgfHwgKGV4cG9ydHMuU3BhY2UgPSB7fSkpO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvR2FtbWFTcGFjZSA9IDEgLyAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGxpbmVhciBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvTGluZWFyU3BhY2UgPSAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbWFsIG51bWJlciB2YWx1ZSBpbiBCYWJ5bG9uLmpzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuRXBzaWxvbiA9IDAuMDAwMDAxO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSBFdWxlciBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5ERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gcmFkaWFucyB0byBFdWxlciBkZWdyZWVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuUkFEMkRFRyA9IDM2MCAvIChNYXRoLlBJICogMik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVhdGVybmlvbiA9IHZvaWQgMDtcbmNvbnN0IFZlY3RvcjNfMSA9IHJlcXVpcmUoXCIuL1ZlY3RvcjNcIik7XG5jb25zdCBTY2FsYXJfMSA9IHJlcXVpcmUoXCIuL1NjYWxhclwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUXVhdGVybmlvbjtcbihmdW5jdGlvbiAoUXVhdGVybmlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBmbG9hdHNcbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHcgLSBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHggPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeSA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHogPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkgKi9cbiAgICB3ID0gMS4wKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHosIHcgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBRdWF0ZXJuaW9uIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gcXVhdGVybmlvbnMuXG4gICAgICogQHBhcmFtIHExIC0gdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcTIgLSB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQocTEsIHEyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IHExLnggKyBxMi54LCB5OiBxMS55ICsgcTIueSwgejogcTEueiArIHEyLnosIHc6IHExLncgKyBxMi53IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHlhdywgcGl0Y2gsIHJvbGwpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMywgczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzLCBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzMsIGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGwgPSByb3RhdGlvbllhd1BpdGNoUm9sbDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcm90YXRpb24gdGhhdCByb3RhdGVzIHogZGVncmVlcyBhcm91bmQgdGhlIHogYXhpcywgeCBkZWdyZWVzIGFyb3VuZCB0aGUgeCBheGlzLCBhbmQgeSBkZWdyZWVzIGFyb3VuZCB0aGUgeSBheGlzLlxuICAgICAqIEBwYXJhbSB4IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB4IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB5IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB5IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB6IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB6IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyKHgsIHksIHopIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHkgKiB0eXBlc18xLkRFRzJSQUQsIHggKiB0eXBlc18xLkRFRzJSQUQsIHogKiB0eXBlc18xLkRFRzJSQUQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyID0gZXVsZXI7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgocSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGxlbmd0aFNxdWFyZWQocSkpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQocSkge1xuICAgICAgICByZXR1cm4gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgcXVhdGVybmlvbnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gKGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0LncpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gdHdvIHJvdGF0aW9ucyBhIGFuZCBiLlxuICAgICAqIEBwYXJhbSBxdWF0MSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcXVhdDIgLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuZ2xlKHF1YXQxLCBxdWF0Mikge1xuICAgICAgICBjb25zdCBkb3RWYWwgPSBkb3QocXVhdDEsIHF1YXQyKTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLmFicyhkb3RWYWwpLCAxKSkgKiAyICogdHlwZXNfMS5SQUQyREVHO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlID0gYW5nbGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZyb20gcXVhdGVybmlvbiBpcyByb3RhdGVkIHRvd2FyZHMgdG8gYnkgYW4gYW5ndWxhciBzdGVwIG9mIG1heERlZ3JlZXNEZWx0YS5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBtYXhEZWdyZWVzRGVsdGEgLSB0aGUgaW50ZXJ2YWwgc3RlcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZVRvd2FyZHMoZnJvbSwgdG8sIG1heERlZ3JlZXNEZWx0YSkge1xuICAgICAgICBjb25zdCBudW0gPSBhbmdsZShmcm9tLCB0byk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgbWF4RGVncmVlc0RlbHRhIC8gbnVtKTtcbiAgICAgICAgcmV0dXJuIHNsZXJwKGZyb20sIHRvLCB0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGVUb3dhcmRzID0gcm90YXRlVG93YXJkcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGZvcndhcmQgYW5kIHVwd2FyZHMgZGlyZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gZm9yd2FyZCAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpblxuICAgICAqIEBwYXJhbSB1cCAtIHRoZSB2ZWN0b3IgdGhhdCBkZWZpbmVzIGluIHdoaWNoIGRpcmVjdGlvbiB1cCBpc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvb2tSb3RhdGlvbihmb3J3YXJkLCB1cCA9IHsgeDogMC4wLCB5OiAxLjAsIHo6IDAuMCB9KSB7XG4gICAgICAgIGNvbnN0IGZvcndhcmROZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHVwLCBmb3J3YXJkTmV3KSk7XG4gICAgICAgIGNvbnN0IHVwTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3MoZm9yd2FyZE5ldywgcmlnaHQpO1xuICAgICAgICBjb25zdCBtMDAgPSByaWdodC54O1xuICAgICAgICBjb25zdCBtMDEgPSByaWdodC55O1xuICAgICAgICBjb25zdCBtMDIgPSByaWdodC56O1xuICAgICAgICBjb25zdCBtMTAgPSB1cE5ldy54O1xuICAgICAgICBjb25zdCBtMTEgPSB1cE5ldy55O1xuICAgICAgICBjb25zdCBtMTIgPSB1cE5ldy56O1xuICAgICAgICBjb25zdCBtMjAgPSBmb3J3YXJkTmV3Lng7XG4gICAgICAgIGNvbnN0IG0yMSA9IGZvcndhcmROZXcueTtcbiAgICAgICAgY29uc3QgbTIyID0gZm9yd2FyZE5ldy56O1xuICAgICAgICBjb25zdCBudW04ID0gbTAwICsgbTExICsgbTIyO1xuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gY3JlYXRlKCk7XG4gICAgICAgIGlmIChudW04ID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bSA9IE1hdGguc3FydChudW04ICsgMSk7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSBudW0gKiAwLjU7XG4gICAgICAgICAgICBudW0gPSAwLjUgLyBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEyIC0gbTIxKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjAgLSBtMDIpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMSAtIG0xMCkgKiBudW07XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTAwID49IG0xMSAmJiBtMDAgPj0gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW03ID0gTWF0aC5zcXJ0KDEgKyBtMDAgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtNCA9IDAuNSAvIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAwLjUgKiBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0wMSArIG0xMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMiArIG0yMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0xMiAtIG0yMSkgKiBudW00O1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0xMSA+IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IE1hdGguc3FydCgxICsgbTExIC0gbTAwIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTMgPSAwLjUgLyBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMCArIG0wMSkgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gMC41ICogbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMjEgKyBtMTIpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMjAgLSBtMDIpICogbnVtMztcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLnNxcnQoMSArIG0yMiAtIG0wMCAtIG0xMSk7XG4gICAgICAgIGNvbnN0IG51bTIgPSAwLjUgLyBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTIwICsgbTAyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjEgKyBtMTIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi56ID0gMC41ICogbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi53ID0gKG0wMSAtIG0xMCkgKiBudW0yO1xuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sb29rUm90YXRpb24gPSBsb29rUm90YXRpb247XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGluIHBsYWNlIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUocSkge1xuICAgICAgICBjb25zdCBxTGVuZ3RoID0gMS4wIC8gbGVuZ3RoKHEpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKHEueCAqIHFMZW5ndGgsIHEueSAqIHFMZW5ndGgsIHEueiAqIHFMZW5ndGgsIHEudyAqIHFMZW5ndGgpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2hpY2ggcm90YXRlcyBmcm9tIGZyb21EaXJlY3Rpb24gdG8gdG9EaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgdGFyZ2V0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tVG9Sb3RhdGlvbihmcm9tLCB0bywgdXAgPSBWZWN0b3IzXzEuVmVjdG9yMy5VcCgpKSB7XG4gICAgICAgIC8vIFVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBpbXBsZW1lbnRlZCBmcm9tIGh0dHBzOi8vZm9ydW0udW5pdHkuY29tL3RocmVhZHMvcXVhdGVybmlvbi1sb29rcm90YXRpb24tYXJvdW5kLWFuLWF4aXMuNjA4NDcwLyNwb3N0LTQwNjk4ODhcbiAgICAgICAgY29uc3QgdjAgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZnJvbSk7XG4gICAgICAgIGNvbnN0IHYxID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKHRvKTtcbiAgICAgICAgY29uc3QgYSA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHYwLCB2MSk7XG4gICAgICAgIGNvbnN0IHcgPSBNYXRoLnNxcnQoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MCkgKiBWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYxKSkgK1xuICAgICAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuZG90KHYwLCB2MSk7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGEpIDwgMC4wMDAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmVjdG9ycyBhcmUgcGFyYWxsZWwsIGNoZWNrIHcgdG8gZmluZCBkaXJlY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIHcgaXMgMCB0aGVuIHZhbHVlcyBhcmUgb3Bwb3NpdGUsIGFuZCB3ZSBzb3VsZCByb3RhdGUgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBzdXBwbGllZCBheGlzXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHZlY3RvcnMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFuZCBubyByb3RhdGlvbiBzaG91bGQgb2NjdXJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh3KSA8IDAuMDAwMVxuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplKGNyZWF0ZSh1cC54LCB1cC55LCB1cC56LCAwKSlcbiAgICAgICAgICAgICAgICA6IElkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGNyZWF0ZShhLngsIGEueSwgYS56LCB3KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tVG9Sb3RhdGlvbiA9IGZyb21Ub1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIC0gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLklkZW50aXR5ID0gSWRlbnRpdHk7XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBldWxlciBhbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcm90YXRpb24uXG4gICAgICogSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyQW5nbGVzKHEpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gVmVjdG9yM18xLlZlY3RvcjMuY3JlYXRlKCk7XG4gICAgICAgIC8vIGlmIHRoZSBpbnB1dCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgaXMgZXhhY3RseSBvbmUuIE90aGVyd2lzZSwgdGhpcyBhY3RzIGFzIGEgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBxdWF0ZXJuaW9uJ3Mgbm90LW5vcm1hbGl6ZWRuZXNzXG4gICAgICAgIGNvbnN0IHVuaXQgPSBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgICAgIC8vIHEgd2lsbCBoYXZlIGEgbWFnbml0dWRlIG9mIDAuNSBvciBncmVhdGVyIGlmIGFuZCBvbmx5IGlmIHEgaXMgYSBzaW5ndWxhcml0eSBjYXNlXG4gICAgICAgIGNvbnN0IHRlc3QgPSBxLnggKiBxLncgLSBxLnkgKiBxLno7XG4gICAgICAgIGlmICh0ZXN0ID4gMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgbm9ydGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlc3QgPCAtMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgc291dGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IC0yICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzaW5ndWxhcml0eSAtIHEgaXMgdGhlIG1ham9yaXR5IG9mIGNhc2VzXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguYXNpbigyICogKHEudyAqIHEueCAtIHEueSAqIHEueikpO1xuICAgICAgICAgICAgb3V0LnkgPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnkgKyAyICogcS56ICogcS54LCAxIC0gMiAqIChxLnggKiBxLnggKyBxLnkgKiBxLnkpKTtcbiAgICAgICAgICAgIG91dC56ID0gTWF0aC5hdGFuMigyICogcS53ICogcS56ICsgMiAqIHEueCAqIHEueSwgMSAtIDIgKiAocS56ICogcS56ICsgcS54ICogcS54KSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnggKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueSAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC56ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBkZWdyZWUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDM2MFxuICAgICAgICBvdXQueCA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LngsIDM2MCk7XG4gICAgICAgIG91dC55ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueSwgMzYwKTtcbiAgICAgICAgb3V0LnogPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC56LCAzNjApO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyQW5nbGVzID0gZXVsZXJBbmdsZXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXN1bHQueCA9IGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMztcbiAgICAgICAgcmVzdWx0LnkgPSBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczM7XG4gICAgICAgIHJlc3VsdC56ID0gYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzO1xuICAgICAgICByZXN1bHQudyA9IGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmID0gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZjtcbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gZGVmaW5lcyB0aGUgc291cmNlIG1hdHJpeFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdHJpeCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXRyaXguX207XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTtcbiAgICAgICAgY29uc3QgbTIxID0gZGF0YVsxXSwgbTIyID0gZGF0YVs1XSwgbTIzID0gZGF0YVs5XTtcbiAgICAgICAgY29uc3QgbTMxID0gZGF0YVsyXSwgbTMyID0gZGF0YVs2XSwgbTMzID0gZGF0YVsxMF07XG4gICAgICAgIC8vIHRzbGludDplbmFibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCB0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcbiAgICAgICAgbGV0IHM7XG4gICAgICAgIGlmICh0cmFjZSA+IDApIHtcbiAgICAgICAgICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjI1IC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0zMiAtIG0yMykgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEzIC0gbTMxKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjEgLSBtMTIpICogcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMTEgPiBtMjIgJiYgbTExID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMzIgLSBtMjMpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0yMiA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTEzIC0gbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMSAtIG0xMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gMC4yNSAqIHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnAobGVmdCwgcmlnaHQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwID0gc2xlcnA7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zIGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIGxldCBudW0yO1xuICAgICAgICBsZXQgbnVtMztcbiAgICAgICAgbGV0IG51bTQgPSBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobnVtNCA8IDApIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgbnVtNCA9IC1udW00O1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHtcbiAgICAgICAgICAgIG51bTMgPSAxIC0gYW1vdW50O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguYWNvcyhudW00KTtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSAxLjAgLyBNYXRoLnNpbihudW01KTtcbiAgICAgICAgICAgIG51bTMgPSBNYXRoLnNpbigoMS4wIC0gYW1vdW50KSAqIG51bTUpICogbnVtNjtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02XG4gICAgICAgICAgICAgICAgOiBNYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnggPSBudW0zICogbGVmdC54ICsgbnVtMiAqIHJpZ2h0Lng7XG4gICAgICAgIHJlc3VsdC55ID0gbnVtMyAqIGxlZnQueSArIG51bTIgKiByaWdodC55O1xuICAgICAgICByZXN1bHQueiA9IG51bTMgKiBsZWZ0LnogKyBudW0yICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LncgPSBudW0zICogbGVmdC53ICsgbnVtMiAqIHJpZ2h0Lnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZiA9IHNsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseShzZWxmLCBxMSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCwgMS4wKTtcbiAgICAgICAgbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIFwicmVzdWx0XCIgYXMgdGhlIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzZWxmLnggKiBxMS53ICsgc2VsZi55ICogcTEueiAtIHNlbGYueiAqIHExLnkgKyBzZWxmLncgKiBxMS54O1xuICAgICAgICByZXN1bHQueSA9IC1zZWxmLnggKiBxMS56ICsgc2VsZi55ICogcTEudyArIHNlbGYueiAqIHExLnggKyBzZWxmLncgKiBxMS55O1xuICAgICAgICByZXN1bHQueiA9IHNlbGYueCAqIHExLnkgLSBzZWxmLnkgKiBxMS54ICsgc2VsZi56ICogcTEudyArIHNlbGYudyAqIHExLno7XG4gICAgICAgIHJlc3VsdC53ID0gLXNlbGYueCAqIHExLnggLSBzZWxmLnkgKiBxMS55IC0gc2VsZi56ICogcTEueiArIHNlbGYudyAqIHExLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZiA9IG11bHRpcGx5VG9SZWY7XG4gICAgZnVuY3Rpb24gYW5nbGVBeGlzKGRlZ3Jlc3MsIGF4aXMpIHtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYXhpcykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSWRlbnRpdHkoKTtcbiAgICAgICAgbGV0IHJhZGlhbnMgPSBkZWdyZXNzICogdHlwZXNfMS5ERUcyUkFEO1xuICAgICAgICByYWRpYW5zICo9IDAuNTtcbiAgICAgICAgY29uc3QgYTIgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoYXhpcyk7XG4gICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLnNjYWxlVG9SZWYoYTIsIE1hdGguc2luKHJhZGlhbnMpLCBhMik7XG4gICAgICAgIHJlc3VsdC54ID0gYTIueDtcbiAgICAgICAgcmVzdWx0LnkgPSBhMi55O1xuICAgICAgICByZXN1bHQueiA9IGEyLno7XG4gICAgICAgIHJlc3VsdC53ID0gTWF0aC5jb3MocmFkaWFucyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUocmVzdWx0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZUF4aXMgPSBhbmdsZUF4aXM7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHplcm8gZmlsbGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uWmVybyA9IFplcm87XG59KShRdWF0ZXJuaW9uID0gZXhwb3J0cy5RdWF0ZXJuaW9uIHx8IChleHBvcnRzLlF1YXRlcm5pb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVhdGVybmlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1F1YXRlcm5pb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1ZlY3RvcjNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbmRleFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgYmFzZTY0IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgYmFzZTY0ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBieXRlIGxlbmd0aCBvZiBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbmJhc2U2NC5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgcCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICBpZiAoIXApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgbiA9IDA7XHJcbiAgICB3aGlsZSAoLS1wICUgNCA+IDEgJiYgc3RyaW5nLmNoYXJBdChwKSA9PT0gXCI9XCIpXHJcbiAgICAgICAgKytuO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChzdHJpbmcubGVuZ3RoICogMykgLyA0IC0gbjtcclxufTtcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGluZyB0YWJsZVxyXG52YXIgYjY0ID0gbmV3IEFycmF5KDY0KTtcclxuXHJcbi8vIEJhc2U2NCBkZWNvZGluZyB0YWJsZVxyXG52YXIgczY0ID0gbmV3IEFycmF5KDEyMyk7XHJcblxyXG4vLyA2NS4uOTAsIDk3Li4xMjIsIDQ4Li41NywgNDMsIDQ3XHJcbmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7KVxyXG4gICAgczY0W2I2NFtpXSA9IGkgPCAyNiA/IGkgKyA2NSA6IGkgPCA1MiA/IGkgKyA3MSA6IGkgPCA2MiA/IGkgLSA0IDogaSAtIDU5IHwgNDNdID0gaSsrO1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYSBidWZmZXIgdG8gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqL1xyXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdO1xyXG4gICAgdmFyIGkgPSAwLCAvLyBvdXRwdXQgaW5kZXhcclxuICAgICAgICBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHZhciBiID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgPj4gMl07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAzKSA8PCA0O1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA0XTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDE1KSA8PCAyO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA2XTtcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiAmIDYzXTtcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaikge1xyXG4gICAgICAgIGNodW5rW2krK10gPSBiNjRbdF07XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxudmFyIGludmFsaWRFbmNvZGluZyA9IFwiaW52YWxpZCBlbmNvZGluZ1wiO1xyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cclxuICogQHRocm93cyB7RXJyb3J9IElmIGVuY29kaW5nIGlzIGludmFsaWRcclxuICovXHJcbmJhc2U2NC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0O1xyXG4gICAgdmFyIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gNjEgJiYgaiA+IDEpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGlmICgoYyA9IHM2NFtjXSkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gdCA8PCAyIHwgKGMgJiA0OCkgPj4gNDtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMTUpIDw8IDQgfCAoYyAmIDYwKSA+PiAyO1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAzKSA8PCA2IHwgYztcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcHBlYXJzIHRvIGJlIGJhc2U2NCBlbmNvZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byB0ZXN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcHJvYmFibHkgYmFzZTY0IGVuY29kZWQsIG90aGVyd2lzZSBmYWxzZVxyXG4gKi9cclxuYmFzZTY0LnRlc3QgPSBmdW5jdGlvbiB0ZXN0KHN0cmluZykge1xyXG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHN0cmluZyk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UuXHJcbiAqIEBjbGFzc2Rlc2MgQSBtaW5pbWFsIGV2ZW50IGVtaXR0ZXIuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIExpc3RlbmVyXHJcbiAqIEBwYXJhbSB7Kn0gW2N0eF0gTGlzdGVuZXIgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2dCwgZm4sIGN0eCkge1xyXG4gICAgKHRoaXMuX2xpc3RlbmVyc1tldnRdIHx8ICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdKSkucHVzaCh7XHJcbiAgICAgICAgZm4gIDogZm4sXHJcbiAgICAgICAgY3R4IDogY3R4IHx8IHRoaXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBvciBhbnkgbWF0Y2hpbmcgbGlzdGVuZXJzIGlmIGFyZ3VtZW50cyBhcmUgb21pdHRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtldnRdIEV2ZW50IG5hbWUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBpZiBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIExpc3RlbmVyIHRvIHJlbW92ZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIG9mIGBldnRgIGlmIG9taXR0ZWQuXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldnQsIGZuKSB7XHJcbiAgICBpZiAoZXZ0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4pXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICArK2k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdHMgYW4gZXZlbnQgYnkgY2FsbGluZyBpdHMgbGlzdGVuZXJzIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2dCkge1xyXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2krK10uY3R4LCBhcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gaW5xdWlyZTtcclxuXHJcbi8qKlxyXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSBvbmx5IGlmIGF2YWlsYWJsZS5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgTW9kdWxlIHRvIHJlcXVpcmVcclxuICogQHJldHVybnMgez9PYmplY3R9IFJlcXVpcmVkIG1vZHVsZSBpZiBhdmFpbGFibGUgYW5kIG5vdCBlbXB0eSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKi9cclxuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBtb2QgPSBldmFsKFwicXVpcmVcIi5yZXBsYWNlKC9eLyxcInJlXCIpKShtb2R1bGVOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXHJcbiAgICAgICAgaWYgKG1vZCAmJiAobW9kLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhtb2QpLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgVVRGOCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIHV0ZjggPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFVURjggYnl0ZSBsZW5ndGggb2YgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG51dGY4Lmxlbmd0aCA9IGZ1bmN0aW9uIHV0ZjhfbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIGxlbiA9IDAsXHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXHJcbiAgICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIGVsc2UgaWYgKChjICYgMHhGQzAwKSA9PT0gMHhEODAwICYmIChzdHJpbmcuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBsZW4gKz0gNDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgbGVuICs9IDM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHJlYWRcclxuICovXHJcbnV0ZjgucmVhZCA9IGZ1bmN0aW9uIHV0ZjhfcmVhZChidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdLFxyXG4gICAgICAgIGkgPSAwLCAvLyBjaGFyIG9mZnNldFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHQgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgaWYgKHQgPCAxMjgpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSB0O1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBlbHNlIGlmICh0ID4gMjM5ICYmIHQgPCAzNjUpIHtcclxuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzKSAtIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweERDMDAgKyAodCAmIDEwMjMpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSBzdHJpbmcgYXMgVVRGOCBieXRlcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlcyB3cml0dGVuXHJcbiAqL1xyXG51dGY4LndyaXRlID0gZnVuY3Rpb24gdXRmOF93cml0ZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQsXHJcbiAgICAgICAgYzEsIC8vIGNoYXJhY3RlciAxXHJcbiAgICAgICAgYzI7IC8vIGNoYXJhY3RlciAyXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMxID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMxIDwgMTI4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGMxIDwgMjA0OCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgICAgICB8IDE5MjtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoYzEgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKChjMiA9IHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgYzEgPSAweDEwMDAwICsgKChjMSAmIDB4MDNGRikgPDwgMTApICsgKGMyICYgMHgwM0ZGKTtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTggICAgICB8IDI0MDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgICAgICB8IDIyNDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IExvbmdCaXRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzLlxuICogQGNsYXNzZGVzYyBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWUuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbG8gTG93IDMyIGJpdHMsIHVuc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gaGkgSGlnaCAzMiBiaXRzLCB1bnNpZ25lZFxuICovXG5mdW5jdGlvbiBMb25nQml0cyhsbywgaGkpIHtcblxuICAgIC8vIG5vdGUgdGhhdCB0aGUgY2FzdHMgYmVsb3cgYXJlIHRoZW9yZXRpY2FsbHkgdW5uZWNlc3NhcnkgYXMgb2YgdG9kYXksIGJ1dCBvbGRlciBzdGF0aWNhbGx5XG4gICAgLy8gZ2VuZXJhdGVkIGNvbnZlcnRlciBjb2RlIG1pZ2h0IHN0aWxsIGNhbGwgdGhlIGN0b3Igd2l0aCBzaWduZWQgMzJiaXRzLiBrZXB0IGZvciBjb21wYXQuXG5cbiAgICAvKipcbiAgICAgKiBMb3cgYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubG8gPSBsbyA+Pj4gMDtcblxuICAgIC8qKlxuICAgICAqIEhpZ2ggYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGkgPSBoaSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBaZXJvIGJpdHMuXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3V0aWwuTG9uZ0JpdHN9XG4gKi9cbnZhciB6ZXJvID0gTG9uZ0JpdHMuemVybyA9IG5ldyBMb25nQml0cygwLCAwKTtcblxuemVyby50b051bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbnplcm8uenpFbmNvZGUgPSB6ZXJvLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuemVyby5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH07XG5cbi8qKlxuICogWmVybyBoYXNoLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbnZhciB6ZXJvSGFzaCA9IExvbmdCaXRzLnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIG51bWJlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb21OdW1iZXIgPSBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMDtcbiAgICBpZiAoc2lnbilcbiAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgdmFyIGxvID0gdmFsdWUgPj4+IDAsXG4gICAgICAgIGhpID0gKHZhbHVlIC0gbG8pIC8gNDI5NDk2NzI5NiA+Pj4gMDtcbiAgICBpZiAoc2lnbikge1xuICAgICAgICBoaSA9IH5oaSA+Pj4gMDtcbiAgICAgICAgbG8gPSB+bG8gPj4+IDA7XG4gICAgICAgIGlmICgrK2xvID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKCsraGkgPiA0Mjk0OTY3Mjk1KVxuICAgICAgICAgICAgICAgIGhpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKGxvLCBoaSk7XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIGEgbnVtYmVyLCBsb25nIG9yIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICAgICAgdmFsdWUgPSB1dGlsLkxvbmcuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubG93IHx8IHZhbHVlLmhpZ2ggPyBuZXcgTG9uZ0JpdHModmFsdWUubG93ID4+PiAwLCB2YWx1ZS5oaWdoID4+PiAwKSA6IHplcm87XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgcG9zc2libHkgdW5zYWZlIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBQb3NzaWJseSB1bnNhZmUgbnVtYmVyXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKHVuc2lnbmVkKSB7XG4gICAgaWYgKCF1bnNpZ25lZCAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgICB2YXIgbG8gPSB+dGhpcy5sbyArIDEgPj4+IDAsXG4gICAgICAgICAgICBoaSA9IH50aGlzLmhpICAgICA+Pj4gMDtcbiAgICAgICAgaWYgKCFsbylcbiAgICAgICAgICAgIGhpID0gaGkgKyAxID4+PiAwO1xuICAgICAgICByZXR1cm4gLShsbyArIGhpICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgbG9uZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd9IExvbmdcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh1bnNpZ25lZCkge1xuICAgIHJldHVybiB1dGlsLkxvbmdcbiAgICAgICAgPyBuZXcgdXRpbC5Mb25nKHRoaXMubG8gfCAwLCB0aGlzLmhpIHwgMCwgQm9vbGVhbih1bnNpZ25lZCkpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogeyBsb3c6IHRoaXMubG8gfCAwLCBoaWdoOiB0aGlzLmhpIHwgMCwgdW5zaWduZWQ6IEJvb2xlYW4odW5zaWduZWQpIH07XG59O1xuXG52YXIgY2hhckNvZGVBdCA9IFN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gQml0c1xuICovXG5Mb25nQml0cy5mcm9tSGFzaCA9IGZ1bmN0aW9uIGZyb21IYXNoKGhhc2gpIHtcbiAgICBpZiAoaGFzaCA9PT0gemVyb0hhc2gpXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMoXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDApXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDEpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMykgPDwgMjQpID4+PiAwXG4gICAgLFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCA0KVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA1KSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDYpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDcpIDw8IDI0KSA+Pj4gMFxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvSGFzaCA9IGZ1bmN0aW9uIHRvSGFzaCgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgdGhpcy5sbyAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMjQgICAgICAsXG4gICAgICAgIHRoaXMuaGkgICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDI0XG4gICAgKTtcbn07XG5cbi8qKlxuICogWmlnLXphZyBlbmNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpFbmNvZGUgPSBmdW5jdGlvbiB6ekVuY29kZSgpIHtcbiAgICB2YXIgbWFzayA9ICAgdGhpcy5oaSA+PiAzMTtcbiAgICB0aGlzLmhpICA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5sbyAgPSAoIHRoaXMubG8gPDwgMSAgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGRlY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekRlY29kZSA9IGZ1bmN0aW9uIHp6RGVjb2RlKCkge1xuICAgIHZhciBtYXNrID0gLSh0aGlzLmxvICYgMSk7XG4gICAgdGhpcy5sbyAgPSAoKHRoaXMubG8gPj4+IDEgfCB0aGlzLmhpIDw8IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMuaGkgID0gKCB0aGlzLmhpID4+PiAxICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgbG9uZ2JpdHMgd2hlbiBlbmNvZGVkIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge251bWJlcn0gTGVuZ3RoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoKSB7XG4gICAgdmFyIHBhcnQwID0gIHRoaXMubG8sXG4gICAgICAgIHBhcnQxID0gKHRoaXMubG8gPj4+IDI4IHwgdGhpcy5oaSA8PCA0KSA+Pj4gMCxcbiAgICAgICAgcGFydDIgPSAgdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHBhcnQyID09PSAwXG4gICAgICAgICA/IHBhcnQxID09PSAwXG4gICAgICAgICAgID8gcGFydDAgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDAgPCAxMjggPyAxIDogMlxuICAgICAgICAgICAgIDogcGFydDAgPCAyMDk3MTUyID8gMyA6IDRcbiAgICAgICAgICAgOiBwYXJ0MSA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MSA8IDEyOCA/IDUgOiA2XG4gICAgICAgICAgICAgOiBwYXJ0MSA8IDIwOTcxNTIgPyA3IDogOFxuICAgICAgICAgOiBwYXJ0MiA8IDEyOCA/IDkgOiAxMDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB1dGlsID0gZXhwb3J0cztcblxuLy8gdXNlZCB0byByZXR1cm4gYSBQcm9taXNlIHdoZXJlIGNhbGxiYWNrIGlzIG9taXR0ZWRcbnV0aWwuYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwuYmFzZTY0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Jhc2U2NFwiKTtcblxuLy8gYmFzZSBjbGFzcyBvZiBycGMuU2VydmljZVxudXRpbC5FdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZXZlbnRlbWl0dGVyXCIpO1xuXG4vLyBmbG9hdCBoYW5kbGluZyBhY2Nyb3NzIGJyb3dzZXJzXG51dGlsLmZsb2F0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Zsb2F0XCIpO1xuXG4vLyByZXF1aXJlcyBtb2R1bGVzIG9wdGlvbmFsbHkgYW5kIGhpZGVzIHRoZSBjYWxsIGZyb20gYnVuZGxlcnNcbnV0aWwuaW5xdWlyZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gdXRmOCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwudXRmOCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy91dGY4XCIpO1xuXG4vLyBwcm92aWRlcyBhIG5vZGUtbGlrZSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlclxudXRpbC5wb29sID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3Bvb2xcIik7XG5cbi8vIHV0aWxpdHkgdG8gd29yayB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZVxudXRpbC5Mb25nQml0cyA9IHJlcXVpcmUoXCIuL2xvbmdiaXRzXCIpO1xuXG4vKipcbiAqIFdoZXRoZXIgcnVubmluZyB3aXRoaW4gbm9kZSBvciBub3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbnV0aWwuaXNOb2RlID0gQm9vbGVhbih0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKipcbiAqIEdsb2JhbCBvYmplY3QgcmVmZXJlbmNlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnV0aWwuZ2xvYmFsID0gdXRpbC5pc05vZGUgJiYgZ2xvYmFsXG4gICAgICAgICAgIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG4gICAgICAgICAgIHx8IHR5cGVvZiBzZWxmICAgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuICAgICAgICAgICB8fCB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG4vKipcbiAqIEFuIGltbXVhYmxlIGVtcHR5IGFycmF5LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtBcnJheS48Kj59XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoW10pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBlbXB0eSBvYmplY3QuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xudXRpbC5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xudXRpbC5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqL1xudXRpbC5pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIHV0aWwuaXNTZXR9LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc3NldCA9XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzU2V0ID0gZnVuY3Rpb24gaXNTZXQob2JqLCBwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW3Byb3BdO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpID4gMDtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBCdWZmZXIgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IG5vZGUncyB0eXBpbmdzLlxuICogQGludGVyZmFjZSBCdWZmZXJcbiAqIEBleHRlbmRzIFVpbnQ4QXJyYXlcbiAqL1xuXG4vKipcbiAqIE5vZGUncyBCdWZmZXIgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPEJ1ZmZlcj59XG4gKi9cbnV0aWwuQnVmZmVyID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBCdWZmZXIgPSB1dGlsLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuICAgICAgICAvLyByZWZ1c2UgdG8gdXNlIG5vbi1ub2RlIGJ1ZmZlcnMgaWYgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQgKHBlcmYgcmVhc29ucyk6XG4gICAgICAgIHJldHVybiBCdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA/IEJ1ZmZlciA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59KSgpO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZnVsbCBmb3IgQnVmZmVyLmZyb20uXG51dGlsLl9CdWZmZXJfZnJvbSA9IG51bGw7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmaWxsIGZvciBCdWZmZXIuYWxsb2NVbnNhZmUuXG51dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIG9mIHdoYXRldmVyIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbc2l6ZU9yQXJyYXk9MF0gQnVmZmVyIHNpemUgb3IgbnVtYmVyIGFycmF5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheXxCdWZmZXJ9IEJ1ZmZlclxuICovXG51dGlsLm5ld0J1ZmZlciA9IGZ1bmN0aW9uIG5ld0J1ZmZlcihzaXplT3JBcnJheSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiBzaXplT3JBcnJheSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogbmV3IHV0aWwuQXJyYXkoc2l6ZU9yQXJyYXkpXG4gICAgICAgIDogdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2Zyb20oc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IHR5cGVvZiBVaW50OEFycmF5ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBzaXplT3JBcnJheVxuICAgICAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoc2l6ZU9yQXJyYXkpO1xufTtcblxuLyoqXG4gKiBBcnJheSBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIHRoZSBicm93c2VyLiBgVWludDhBcnJheWAgaWYgc3VwcG9ydGVkLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxVaW50OEFycmF5Pn1cbiAqL1xudXRpbC5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gVWludDhBcnJheSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA6IEFycmF5O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIExvbmcgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgTG9uZyBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbG9uZy5qcy5cbiAqIEBpbnRlcmZhY2UgTG9uZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvdyBMb3cgYml0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGhpZ2ggSGlnaCBiaXRzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBMb25nLmpzJ3MgTG9uZyBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8TG9uZz59XG4gKi9cbnV0aWwuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTy5Mb25nXG4gICAgICAgICB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5Mb25nXG4gICAgICAgICB8fCB1dGlsLmlucXVpcmUoXCJsb25nXCIpO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAyIGJpdCAoYGJvb2xgKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDMyIGJpdCAoYGludDMyYCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkzMlJlID0gL14tPyg/OjB8WzEtOV1bMC05XSopJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDY0IGJpdCAoYGludDY0YCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXk2NFJlID0gL14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIG9yIGxvbmcgdG8gYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbnV0aWwubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uIGxvbmdUb0hhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB1dGlsLkxvbmdCaXRzLmZyb20odmFsdWUpLnRvSGFzaCgpXG4gICAgICAgIDogdXRpbC5Mb25nQml0cy56ZXJvSGFzaDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcgdG8gYSBsb25nIG9yIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd8bnVtYmVyfSBPcmlnaW5hbCB2YWx1ZVxuICovXG51dGlsLmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uIGxvbmdGcm9tSGFzaChoYXNoLCB1bnNpZ25lZCkge1xuICAgIHZhciBiaXRzID0gdXRpbC5Mb25nQml0cy5mcm9tSGFzaChoYXNoKTtcbiAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICByZXR1cm4gdXRpbC5Mb25nLmZyb21CaXRzKGJpdHMubG8sIGJpdHMuaGksIHVuc2lnbmVkKTtcbiAgICByZXR1cm4gYml0cy50b051bWJlcihCb29sZWFuKHVuc2lnbmVkKSk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc291cmNlIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gc3JjIFNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lmTm90U2V0PWZhbHNlXSBNZXJnZXMgb25seSBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHNldFxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXN0aW5hdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIGlmTm90U2V0KSB7IC8vIHVzZWQgYnkgY29udmVydGVyc1xuICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChkc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCB8fCAhaWZOb3RTZXQpXG4gICAgICAgICAgICBkc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgcmV0dXJuIGRzdDtcbn1cblxudXRpbC5tZXJnZSA9IG1lcmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC5sY0ZpcnN0ID0gZnVuY3Rpb24gbGNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBlcnJvciBjb25zdHJ1Y3Rvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFcnJvciBuYW1lXG4gKiBAcmV0dXJucyB7Q29uc3RydWN0b3I8RXJyb3I+fSBDdXN0b20gZXJyb3IgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gbmV3RXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcykge1xuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdXN0b21FcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgIC8vIF4ganVzdCByZXR1cm5zIGEgbmV3IGVycm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIGN0b3IgY2FuIGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWVzc2FnZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtZXNzYWdlOyB9IH0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgLy8gbm9kZVxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3VzdG9tRXJyb3IpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFja1wiLCB7IHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayB8fCBcIlwiIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgKEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21FcnJvci5wcm90b3R5cGUsIFwibmFtZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBuYW1lOyB9IH0pO1xuXG4gICAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxudXRpbC5uZXdFcnJvciA9IG5ld0Vycm9yO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcHJvdG9jb2wgZXJyb3IuXG4gKiBAY2xhc3NkZXNjIEVycm9yIHN1YmNsYXNzIGluZGljYXRpbmcgYSBwcm90b2NvbCBzcGVjaWZjIGVycm9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBleHRlbmRzIEVycm9yXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIEFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgICAgTXlNZXNzYWdlLmRlY29kZShzb21lQnVmZmVyKTsgLy8gdGhyb3dzIGlmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICogfSBjYXRjaCAoZSkge1xuICogICAgIGlmIChlIGluc3RhbmNlb2YgUHJvdG9jb2xFcnJvciAmJiBlLmluc3RhbmNlKVxuICogICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgc28gZmFyOiBcIiArIEpTT04uc3RyaW5naWZ5KGUuaW5zdGFuY2UpKTtcbiAqIH1cbiAqL1xudXRpbC5Qcm90b2NvbEVycm9yID0gbmV3RXJyb3IoXCJQcm90b2NvbEVycm9yXCIpO1xuXG4vKipcbiAqIFNvIGZhciBkZWNvZGVkIG1lc3NhZ2UgaW5zdGFuY2UuXG4gKiBAbmFtZSB1dGlsLlByb3RvY29sRXJyb3IjaW5zdGFuY2VcbiAqIEB0eXBlIHtNZXNzYWdlPFQ+fVxuICovXG5cbi8qKlxuICogQSBPbmVPZiBnZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZHZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZHZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBnZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZHZXR0ZXJ9IFVuYm91bmQgZ2V0dGVyXG4gKi9cbnV0aWwub25lT2ZHZXR0ZXIgPSBmdW5jdGlvbiBnZXRPbmVPZihmaWVsZE5hbWVzKSB7XG4gICAgdmFyIGZpZWxkTWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICBmaWVsZE1hcFtmaWVsZE5hbWVzW2ldXSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID4gLTE7IC0taSlcbiAgICAgICAgICAgIGlmIChmaWVsZE1hcFtrZXlzW2ldXSA9PT0gMSAmJiB0aGlzW2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgdGhpc1trZXlzW2ldXSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5c1tpXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBIE9uZU9mIHNldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZlNldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZlNldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBGaWVsZCBuYW1lXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgc2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mU2V0dGVyfSBVbmJvdW5kIHNldHRlclxuICovXG51dGlsLm9uZU9mU2V0dGVyID0gZnVuY3Rpb24gc2V0T25lT2YoZmllbGROYW1lcykge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVzW2ldICE9PSBuYW1lKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ZpZWxkTmFtZXNbaV1dO1xuICAgIH07XG59O1xuXG4vKipcbiAqIERlZmF1bHQgY29udmVyc2lvbiBvcHRpb25zIHVzZWQgZm9yIHtAbGluayBNZXNzYWdlI3RvSlNPTn0gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoZXNlIG9wdGlvbnMgYXJlIGNsb3NlIHRvIHByb3RvMydzIEpTT04gbWFwcGluZyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBpbnRlcm5hbCB0eXBlcyBsaWtlIEFueSBhcmUgaGFuZGxlZCBqdXN0IGxpa2UgbWVzc2FnZXMuIE1vcmUgcHJlY2lzZWx5OlxuICpcbiAqIC0gTG9uZ3MgYmVjb21lIHN0cmluZ3NcbiAqIC0gRW51bXMgYmVjb21lIHN0cmluZyBrZXlzXG4gKiAtIEJ5dGVzIGJlY29tZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKiAtIChTdWItKU1lc3NhZ2VzIGJlY29tZSBwbGFpbiBvYmplY3RzXG4gKiAtIE1hcHMgYmVjb21lIHBsYWluIG9iamVjdHMgd2l0aCBhbGwgc3RyaW5nIGtleXNcbiAqIC0gUmVwZWF0ZWQgZmllbGRzIGJlY29tZSBhcnJheXNcbiAqIC0gTmFOIGFuZCBJbmZpbml0eSBmb3IgZmxvYXQgYW5kIGRvdWJsZSBmaWVsZHMgYmVjb21lIHN0cmluZ3NcbiAqXG4gKiBAdHlwZSB7SUNvbnZlcnNpb25PcHRpb25zfVxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zP2hsPWVuI2pzb25cbiAqL1xudXRpbC50b0pTT05PcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGpzb246IHRydWVcbn07XG5cbi8vIFNldHMgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCAoY2FsbGVkIGluIGluZGV4LW1pbmltYWwpXG51dGlsLl9jb25maWd1cmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFCdWZmZXIpIHtcbiAgICAgICAgdXRpbC5fQnVmZmVyX2Zyb20gPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJlY2F1c2Ugbm9kZSA0LnggYnVmZmVycyBhcmUgaW5jb21wYXRpYmxlICYgaW1tdXRhYmxlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9wcm90b2J1Zi5qcy9wdWxsLzY2NVxuICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gQnVmZmVyLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBCdWZmZXIuZnJvbSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfZnJvbSh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgICAgIH07XG4gICAgdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gQnVmZmVyLmFsbG9jVW5zYWZlIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9hbGxvY1Vuc2FmZShzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICAgICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcldyaXRlcjtcblxuLy8gZXh0ZW5kcyBXcml0ZXJcbnZhciBXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG4oQnVmZmVyV3JpdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyV3JpdGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBCdWZmZXJXcml0ZXIoKSB7XG4gICAgV3JpdGVyLmNhbGwodGhpcyk7XG59XG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBCdWZmZXJcbiAgICAgKi9cbiAgICBCdWZmZXJXcml0ZXIuYWxsb2MgPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmU7XG5cbiAgICBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwuQnVmZmVyICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiXG4gICAgICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBmYXN0ZXIgdGhhbiBjb3B5IChyZXF1aXJlcyBub2RlID49IDQgd2hlcmUgQnVmZmVycyBleHRlbmQgVWludDhBcnJheSBhbmQgc2V0IGlzIHByb3Blcmx5IGluaGVyaXRlZClcbiAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfY29weSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgaWYgKHZhbC5jb3B5KSAvLyBCdWZmZXIgdmFsdWVzXG4gICAgICAgICAgICB2YWwuY29weShidWYsIHBvcywgMCwgdmFsLmxlbmd0aCk7XG4gICAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7KSAvLyBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSB2YWxbaSsrXTtcbiAgICAgICAgfTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzX2J1ZmZlcih2YWx1ZSkge1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgdmFsdWUgPSB1dGlsLl9CdWZmZXJfZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIik7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2goQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVTdHJpbmdCdWZmZXIodmFsLCBidWYsIHBvcykge1xuICAgIGlmICh2YWwubGVuZ3RoIDwgNDApIC8vIHBsYWluIGpzIGlzIGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAocHJvYmFibHkgZHVlIHRvIHJlZHVuZGFudCBhc3NlcnRpb25zKVxuICAgICAgICB1dGlsLnV0Zjgud3JpdGUodmFsLCBidWYsIHBvcyk7XG4gICAgZWxzZSBpZiAoYnVmLnV0ZjhXcml0ZSlcbiAgICAgICAgYnVmLnV0ZjhXcml0ZSh2YWwsIHBvcyk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGUodmFsLCBwb3MpO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZ19idWZmZXIodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRpbC5CdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQG5hbWUgQnVmZmVyV3JpdGVyI2ZpbmlzaFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlclJlYWRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShyZWFkZXIsIHdyaXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiICsgcmVhZGVyLnBvcyArIFwiICsgXCIgKyAod3JpdGVMZW5ndGggfHwgMSkgKyBcIiA+IFwiICsgcmVhZGVyLmxlbik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWFkZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBSZWFkZXIoYnVmZmVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAdHlwZSB7VWludDhBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZiA9IGJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIHBvc2l0aW9uLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBidWZmZXIubGVuZ3RoO1xufVxuXG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IGZ1bmN0aW9uIGNyZWF0ZV90eXBlZF9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfTtcblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFkZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCdWZmZXJSZWFkZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZV9hcnJheShidWZmZXIpO1xuICAgICAgICAgICAgfSkoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGNyZWF0ZV9hcnJheTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7VWludDhBcnJheXxCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKiBAcmV0dXJucyB7UmVhZGVyfEJ1ZmZlclJlYWRlcn0gQSB7QGxpbmsgQnVmZmVyUmVhZGVyfSBpZiBgYnVmZmVyYCBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGEge0BsaW5rIFJlYWRlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgYnVmZmVyYCBpcyBub3QgYSB2YWxpZCBidWZmZXJcbiAqL1xuUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG5SZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnVpbnQzMiA9IChmdW5jdGlvbiByZWFkX3VpbnQzMl9zZXR1cCgpIHtcbiAgICB2YXIgdmFsdWUgPSA0Mjk0OTY3Mjk1OyAvLyBvcHRpbWl6ZXIgdHlwZS1oaW50LCB0ZW5kcyB0byBkZW9wdCBvdGhlcndpc2UgKD8hKVxuICAgIHJldHVybiBmdW5jdGlvbiByZWFkX3VpbnQzMigpIHtcbiAgICAgICAgdmFsdWUgPSAoICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3NdICYgMTI3ICAgICAgICkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8ICA3KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyMSkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAgMTUpIDw8IDI4KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodGhpcy5wb3MgKz0gNSkgPiB0aGlzLmxlbikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxlbjtcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHJlYWRfaW50MzIoKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ludDMyKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudWludDMyKCk7XG4gICAgcmV0dXJuIHZhbHVlID4+PiAxIF4gLSh2YWx1ZSAmIDEpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkTG9uZ1ZhcmludCgpIHtcbiAgICAvLyB0ZW5kcyB0byBkZW9wdCB3aXRoIGxvY2FsIHZhcnMgZm9yIG9jdGV0IGV0Yy5cbiAgICB2YXIgYml0cyA9IG5ldyBMb25nQml0cygwLCAwKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGxvKVxuICAgICAgICBmb3IgKDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgLy8gMXN0Li40dGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA1dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjgpID4+PiAwO1xuICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA+PiAgNCkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gMXN0Li4zdGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA0dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAoaGkpXG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciN1aW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjc2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiByZWFkX2Jvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgIT09IDA7XG59O1xuXG5mdW5jdGlvbiByZWFkRml4ZWQzMl9lbmQoYnVmLCBlbmQpIHsgLy8gbm90ZSB0aGF0IHRoaXMgdXNlcyBgZW5kYCwgbm90IGBwb3NgXG4gICAgcmV0dXJuIChidWZbZW5kIC0gNF1cbiAgICAgICAgICB8IGJ1ZltlbmQgLSAzXSA8PCA4XG4gICAgICAgICAgfCBidWZbZW5kIC0gMl0gPDwgMTZcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gcmVhZF9maXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KTtcbn07XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgvKiB0aGlzOiBSZWFkZXIgKi8pIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDgpO1xuXG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIHppZy16YWcgZW5jb2RlZCBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI3NmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIGZsb2F0ICgzMiBiaXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiByZWFkX2Zsb2F0KCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gcmVhZF9kb3VibGUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZERvdWJsZUxFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gcmVhZF9ieXRlcygpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy51aW50MzIoKSxcbiAgICAgICAgc3RhcnQgID0gdGhpcy5wb3MsXG4gICAgICAgIGVuZCAgICA9IHRoaXMucG9zICsgbGVuZ3RoO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVuZCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcblxuICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpIC8vIHBsYWluIGFycmF5XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZShzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gc3RhcnQgPT09IGVuZCAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICA/IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKVxuICAgICAgICA6IHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyUmVhZGVyO1xuXG4vLyBleHRlbmRzIFJlYWRlclxudmFyIFJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbihCdWZmZXJSZWFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWFkZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJSZWFkZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHJlYWRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFJlYWRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGJ1ZmZlcikge1xuICAgIFJlYWRlci5jYWxsKHRoaXMsIGJ1ZmZlcik7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnVmXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbn1cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodXRpbC5CdWZmZXIpXG4gICAgICAgIEJ1ZmZlclJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5CdWZmZXIucHJvdG90eXBlLnNsaWNlO1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nX2J1ZmZlcigpIHtcbiAgICB2YXIgbGVuID0gdGhpcy51aW50MzIoKTsgLy8gbW9kaWZpZXMgcG9zXG4gICAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZVxuICAgICAgICA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKVxuICAgICAgICA6IHRoaXMuYnVmLnRvU3RyaW5nKFwidXRmLThcIiwgdGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnl0ZXNcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gVmFsdWUgcmVhZFxuICovXG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vLyBFeHRlbmRzIEV2ZW50RW1pdHRlclxuKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1dGlsLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFNlcnZpY2U7XG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBycGMuU2VydmljZU1ldGhvZHxTZXJ2aWNlTWV0aG9kfS5cbiAqXG4gKiBEaWZmZXJzIGZyb20ge0BsaW5rIFJQQ0ltcGxDYWxsYmFja30gaW4gdGhhdCBpdCBpcyBhbiBhY3R1YWwgY2FsbGJhY2sgb2YgYSBzZXJ2aWNlIG1ldGhvZCB3aGljaCBtYXkgbm90IHJldHVybiBgcmVzcG9uc2UgPSBudWxsYC5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2tcbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gKiBAcGFyYW0ge1RSZXN9IFtyZXNwb25zZV0gUmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgcGFydCBvZiBhIHtAbGluayBycGMuU2VydmljZX0gYXMgY3JlYXRlZCBieSB7QGxpbmsgU2VydmljZS5jcmVhdGV9LlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RcbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IFtjYWxsYmFja10gTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIHRoZSByZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPFRSZXM+Pn0gUHJvbWlzZSBpZiBgY2FsbGJhY2tgIGhhcyBiZWVuIG9taXR0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSUEMgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQW4gUlBDIHNlcnZpY2UgYXMgcmV0dXJuZWQgYnkge0BsaW5rIFNlcnZpY2UjY3JlYXRlfS5cbiAqIEBleHBvcnRzIHJwYy5TZXJ2aWNlXG4gKiBAZXh0ZW5kcyB1dGlsLkV2ZW50RW1pdHRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1JQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuXG4gICAgaWYgKHR5cGVvZiBycGNJbXBsICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXG4gICAgdXRpbC5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFJQQyBpbXBsZW1lbnRhdGlvbi4gQmVjb21lcyBgbnVsbGAgb25jZSB0aGUgc2VydmljZSBpcyBlbmRlZC5cbiAgICAgKiBAdHlwZSB7UlBDSW1wbHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucnBjSW1wbCA9IHJwY0ltcGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdERlbGltaXRlZCA9IEJvb2xlYW4ocmVxdWVzdERlbGltaXRlZCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlRGVsaW1pdGVkID0gQm9vbGVhbihyZXNwb25zZURlbGltaXRlZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBzZXJ2aWNlIG1ldGhvZCB0aHJvdWdoIHtAbGluayBycGMuU2VydmljZSNycGNJbXBsfHJwY0ltcGx9LlxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8VFJlcSxUUmVzPn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXE+fSByZXF1ZXN0Q3RvciBSZXF1ZXN0IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXM+fSByZXNwb25zZUN0b3IgUmVzcG9uc2UgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gY2FsbGJhY2sgU2VydmljZSBjYWxsYmFja1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJwY0NhbGwgPSBmdW5jdGlvbiBycGNDYWxsKG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCwgY2FsbGJhY2spIHtcblxuICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKVxuICAgICAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UocnBjQ2FsbCwgc2VsZiwgbWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0KTtcblxuICAgIGlmICghc2VsZi5ycGNJbXBsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKEVycm9yKFwiYWxyZWFkeSBlbmRlZFwiKSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLnJwY0ltcGwoXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0Q3RvcltzZWxmLnJlcXVlc3REZWxpbWl0ZWQgPyBcImVuY29kZURlbGltaXRlZFwiIDogXCJlbmNvZGVcIl0ocmVxdWVzdCkuZmluaXNoKCksXG4gICAgICAgICAgICBmdW5jdGlvbiBycGNDYWxsYmFjayhlcnIsIHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kKC8qIGVuZGVkQnlSUEMgKi8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiByZXNwb25zZUN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlQ3RvcltzZWxmLnJlc3BvbnNlRGVsaW1pdGVkID8gXCJkZWNvZGVEZWxpbWl0ZWRcIiA6IFwiZGVjb2RlXCJdKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImRhdGFcIiwgcmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIEVuZHMgdGhpcyBzZXJ2aWNlIGFuZCBlbWl0cyB0aGUgYGVuZGAgZXZlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmRlZEJ5UlBDPWZhbHNlXSBXaGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGVuZGVkIGJ5IHRoZSBSUEMgaW1wbGVtZW50YXRpb24uXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IGB0aGlzYFxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZW5kZWRCeVJQQykge1xuICAgIGlmICh0aGlzLnJwY0ltcGwpIHtcbiAgICAgICAgaWYgKCFlbmRlZEJ5UlBDKSAvLyBzaWduYWwgZW5kIHRvIHJwY0ltcGxcbiAgICAgICAgICAgIHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgdGhpcy5ycGNJbXBsID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogTmFtZWQgcm9vdHMuXG4gKiBUaGlzIGlzIHdoZXJlIHBianMgc3RvcmVzIGdlbmVyYXRlZCBzdHJ1Y3R1cmVzICh0aGUgb3B0aW9uIGAtciwgLS1yb290YCBzcGVjaWZpZXMgYSBuYW1lKS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgbWFudWFsbHkgdG8gbWFrZSByb290cyBhdmFpbGFibGUgYWNjcm9zcyBtb2R1bGVzLlxuICogQG5hbWUgcm9vdHNcbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSb290Pn1cbiAqIEBleGFtcGxlXG4gKiAvLyBwYmpzIC1yIG15cm9vdCAtbyBjb21waWxlZC5qcyAuLi5cbiAqXG4gKiAvLyBpbiBhbm90aGVyIG1vZHVsZTpcbiAqIHJlcXVpcmUoXCIuL2NvbXBpbGVkLmpzXCIpO1xuICpcbiAqIC8vIGluIGFueSBzdWJzZXF1ZW50IG1vZHVsZTpcbiAqIHZhciByb290ID0gcHJvdG9idWYucm9vdHNbXCJteXJvb3RcIl07XG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLCIvLyBtaW5pbWFsIGxpYnJhcnkgZW50cnkgcG9pbnQuXG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9zcmMvaW5kZXgtbWluaW1hbFwiKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdG9yIHtcbiAgc3RhdGVzOiBQQkFuaW1hdGlvblN0YXRlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdGlvblN0YXRlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGNsaXA6IHN0cmluZ1xuICBwbGF5aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBzICovXG4gIHdlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgc3BlZWQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaG91bGRSZXNldD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKTogUEJBbmltYXRvciB7XG4gIHJldHVybiB7IHN0YXRlczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdG9yID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRvciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnN0YXRlcykge1xuICAgICAgUEJBbmltYXRpb25TdGF0ZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQW5pbWF0b3Ige1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlcy5wdXNoKFBCQW5pbWF0aW9uU3RhdGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0aW9uU3RhdGUoKTogUEJBbmltYXRpb25TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJycsXG4gICAgY2xpcDogJycsXG4gICAgcGxheWluZzogdW5kZWZpbmVkLFxuICAgIHdlaWdodDogdW5kZWZpbmVkLFxuICAgIHNwZWVkOiB1bmRlZmluZWQsXG4gICAgbG9vcDogdW5kZWZpbmVkLFxuICAgIHNob3VsZFJlc2V0OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdGlvblN0YXRlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRpb25TdGF0ZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGlwICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuY2xpcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxheWluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UucGxheWluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2VpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uud2VpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGVlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLnNwZWVkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5ib29sKG1lc3NhZ2Uuc2hvdWxkUmVzZXQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkFuaW1hdGlvblN0YXRlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkFuaW1hdGlvblN0YXRlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuY2xpcCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uud2VpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5zcGVlZCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5zaG91bGRSZXNldCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBbmltYXRvciB9IGZyb20gJy4vcGIvQW5pbWF0b3IuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3JTY2hlbWE6IElTY2hlbWE8UEJBbmltYXRvcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBbmltYXRvciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQW5pbWF0b3IuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQW5pbWF0b3Ige1xuICAgIHJldHVybiBQQkFuaW1hdG9yLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBbmltYXRvciB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQW5pbWF0b3IuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF1ZGlvU291cmNlIHtcbiAgcGxheWluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICB2b2x1bWU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbG9vcD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBwaXRjaD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBhdWRpb0NsaXBVcmw6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgcmV0dXJuIHsgcGxheWluZzogdW5kZWZpbmVkLCB2b2x1bWU6IHVuZGVmaW5lZCwgbG9vcDogdW5kZWZpbmVkLCBwaXRjaDogdW5kZWZpbmVkLCBhdWRpb0NsaXBVcmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1NvdXJjZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9Tb3VyY2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnZvbHVtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubG9vcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGl0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5waXRjaClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXVkaW9DbGlwVXJsICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXVkaW9DbGlwVXJsKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucGxheWluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52b2x1bWUgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmxvb3AgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucGl0Y2ggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmF1ZGlvQ2xpcFVybCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU291cmNlIH0gZnJvbSAnLi9wYi9BdWRpb1NvdXJjZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZVNjaGVtYTogSVNjaGVtYTxQQkF1ZGlvU291cmNlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU291cmNlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1NvdXJjZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJBbmNob3JQb2ludCB7XG4gIFBPU0lUSU9OID0gMCxcbiAgTkFNRV9UQUcgPSAxLFxuICBMRUZUX0hBTkQgPSAyLFxuICBSSUdIVF9IQU5EID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhckF0dGFjaCB7XG4gIGF2YXRhcklkOiBzdHJpbmdcbiAgYW5jaG9yUG9pbnRJZDogQXZhdGFyQW5jaG9yUG9pbnRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyQXR0YWNoKCk6IFBCQXZhdGFyQXR0YWNoIHtcbiAgcmV0dXJuIHsgYXZhdGFySWQ6ICcnLCBhbmNob3JQb2ludElkOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJBdHRhY2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF2YXRhckF0dGFjaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmF2YXRhcklkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuYXZhdGFySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFuY2hvclBvaW50SWQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYW5jaG9yUG9pbnRJZClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhckF0dGFjaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXZhdGFySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbmNob3JQb2ludElkID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyQXR0YWNoIH0gZnJvbSAnLi9wYi9BdmF0YXJBdHRhY2guZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyQXR0YWNoPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhckF0dGFjaCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyQXR0YWNoLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgcmV0dXJuIFBCQXZhdGFyQXR0YWNoLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhckF0dGFjaC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvcjMge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHo6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVmVjdG9yMygpOiBWZWN0b3IzIHtcbiAgcmV0dXJuIHsgeDogMCwgeTogMCwgejogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZlY3RvcjMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBWZWN0b3IzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnogIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UueilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFZlY3RvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVZlY3RvcjMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnogPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJNb2RpZmllciB7XG4gIEhJREVfQVZBVEFSUyA9IDAsXG4gIERJU0FCTEVfUEFTU1BPUlRTID0gMSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZXhjbHVkZUlkczogc3RyaW5nW11cbiAgbW9kaWZpZXJzOiBBdmF0YXJNb2RpZmllcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF2YXRhck1vZGlmaWVyQXJlYSgpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIHJldHVybiB7IGFyZWE6IHVuZGVmaW5lZCwgZXhjbHVkZUlkczogW10sIG1vZGlmaWVyczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhck1vZGlmaWVyQXJlYSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyTW9kaWZpZXJBcmVhLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXJlYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmFyZWEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXhjbHVkZUlkcykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKHYhKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDI2KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5tb2RpZmllcnMpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyTW9kaWZpZXJBcmVhKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hcmVhID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZXhjbHVkZUlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLm1vZGlmaWVycy5wdXNoKHJlYWRlci5pbnQzMigpIGFzIGFueSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS5tb2RpZmllcnMucHVzaChyZWFkZXIuaW50MzIoKSBhcyBhbnkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhck1vZGlmaWVyQXJlYSB9IGZyb20gJy4vcGIvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYTogSVNjaGVtYTxQQkF2YXRhck1vZGlmaWVyQXJlYT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJNb2RpZmllckFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhck1vZGlmaWVyQXJlYS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIHJldHVybiBQQkF2YXRhck1vZGlmaWVyQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJNb2RpZmllckFyZWEuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gTG9uZztcclxuXHJcbi8qKlxyXG4gKiB3YXNtIG9wdGltaXphdGlvbnMsIHRvIGRvIG5hdGl2ZSBpNjQgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlkZVxyXG4gKi9cclxudmFyIHdhc20gPSBudWxsO1xyXG5cclxudHJ5IHtcclxuICB3YXNtID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUobmV3IFVpbnQ4QXJyYXkoW1xyXG4gICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCAxMywgMiwgOTYsIDAsIDEsIDEyNywgOTYsIDQsIDEyNywgMTI3LCAxMjcsIDEyNywgMSwgMTI3LCAzLCA3LCA2LCAwLCAxLCAxLCAxLCAxLCAxLCA2LCA2LCAxLCAxMjcsIDEsIDY1LCAwLCAxMSwgNywgNTAsIDYsIDMsIDEwOSwgMTE3LCAxMDgsIDAsIDEsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTUsIDAsIDIsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTcsIDAsIDMsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTUsIDAsIDQsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTcsIDAsIDUsIDgsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDQsIDEwNSwgMTAzLCAxMDQsIDAsIDAsIDEwLCAxOTEsIDEsIDYsIDQsIDAsIDM1LCAwLCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI2LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjcsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOCwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI5LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMzAsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTFcclxuICBdKSksIHt9KS5leHBvcnRzO1xyXG59IGNhdGNoIChlKSB7XHJcbiAgLy8gbm8gd2FzbSBzdXBwb3J0IDooXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciwgZ2l2ZW4gaXRzIGxvdyBhbmQgaGlnaCAzMiBiaXQgdmFsdWVzIGFzICpzaWduZWQqIGludGVnZXJzLlxyXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBMb25ncy5cclxuICogQGV4cG9ydHMgTG9uZ1xyXG4gKiBAY2xhc3MgQSBMb25nIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBMb25nKGxvdywgaGlnaCwgdW5zaWduZWQpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb3cgMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubG93ID0gbG93IHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhpZ2ggPSBoaWdoIHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkO1xyXG59XHJcblxyXG4vLyBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBsb25nIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxyXG4vLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxyXG4vLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcclxuLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxyXG4vLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xyXG4vLyBvciBjaGFuZ2UgaW4gc2lnbi5cclxuLy9cclxuLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxyXG4vLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cclxuLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXHJcbi8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcclxuLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xyXG4vLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXHJcbi8vXHJcbi8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxyXG4vLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxyXG5cclxuLyoqXHJcbiAqIEFuIGluZGljYXRvciB1c2VkIHRvIHJlbGlhYmx5IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBMb25nIG9yIG5vdC5cclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBjb25zdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuTG9uZy5wcm90b3R5cGUuX19pc0xvbmdfXztcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nLnByb3RvdHlwZSwgXCJfX2lzTG9uZ19fXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0xvbmcob2JqKSB7XHJcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzTG9uZ19fXCJdKSA9PT0gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgTG9uZy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmcuaXNMb25nID0gaXNMb25nO1xyXG5cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIExvbmcgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxyXG4gKiBAdHlwZSB7IU9iamVjdH1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQSBjYWNoZSBvZiB0aGUgTG9uZyByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuXHJcbiAqIEB0eXBlIHshT2JqZWN0fVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tSW50KHZhbHVlLCB1bnNpZ25lZCkge1xyXG4gICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTtcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIHZhbHVlID4+Pj0gMDtcclxuICAgICAgICBpZiAoY2FjaGUgPSAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikpIHtcclxuICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgKHZhbHVlIHwgMCkgPCAwID8gLTEgOiAwLCB0cnVlKTtcclxuICAgICAgICBpZiAoY2FjaGUpXHJcbiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlIHw9IDA7XHJcbiAgICAgICAgaWYgKGNhY2hlID0gKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKVxyXG4gICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSAzMiBiaXQgaW50ZWdlciBpbiBxdWVzdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tSW50ID0gZnJvbUludDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgICAgIHJldHVybiBVWkVSTztcclxuICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICAgICAgaWYgKHZhbHVlICsgMSA+PSBUV09fUFdSXzYzX0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1BWF9WQUxVRTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwpIHwgMCwgKHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCwgdW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgbnVtYmVyIGluIHF1ZXN0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbUJpdHMobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xyXG4gKiAgYXNzdW1lZCB0byB1c2UgMzIgYml0cy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHMgVGhlIGhpZ2ggMzIgYml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQml0cyA9IGZyb21CaXRzO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gYmFzZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZXhwb25lbnRcclxuICogQHJldHVybnMge251bWJlcn1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgcG93X2RibCA9IE1hdGgucG93OyAvLyBVc2VkIDQgdGltZXMgKDQqOCB0byAxNSs0KVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcclxuICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkge1xyXG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2VtcHR5IHN0cmluZycpO1xyXG4gICAgaWYgKHN0ciA9PT0gXCJOYU5cIiB8fCBzdHIgPT09IFwiSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiK0luZmluaXR5XCIgfHwgc3RyID09PSBcIi1JbmZpbml0eVwiKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKHR5cGVvZiB1bnNpZ25lZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAvLyBGb3IgZ29vZy5tYXRoLmxvbmcgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgIHJhZGl4ID0gdW5zaWduZWQsXHJcbiAgICAgICAgdW5zaWduZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5zaWduZWQgPSAhISB1bnNpZ25lZDtcclxuICAgIH1cclxuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XHJcbiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpXHJcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXgnKTtcclxuXHJcbiAgICB2YXIgcDtcclxuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcclxuICAgICAgICB0aHJvdyBFcnJvcignaW50ZXJpb3IgaHlwaGVuJyk7XHJcbiAgICBlbHNlIGlmIChwID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gWkVSTztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksXHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcclxuICAgICAgICBpZiAoc2l6ZSA8IDgpIHtcclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCBzaXplKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocG93ZXIpLmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQudW5zaWduZWQgPSB1bnNpZ25lZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nXHJcbiAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBUaGUgcmFkaXggaW4gd2hpY2ggdGhlIHRleHQgaXMgd3JpdHRlbiAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tU3RyaW5nID0gZnJvbVN0cmluZztcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlciwgdW5zaWduZWQ6IGJvb2xlYW59fSB2YWxcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7XHJcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBMb25nOlxyXG4gICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICdib29sZWFuJyA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBMb25nIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmcm9tKiBmdW5jdGlvbiBmb3IgaXRzIHR5cGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbCBWYWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmcuZnJvbVZhbHVlID0gZnJvbVZhbHVlO1xyXG5cclxuLy8gTk9URTogdGhlIGNvbXBpbGVyIHNob3VsZCBpbmxpbmUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJlbG93IGFuZCB0aGVuIHJlbW92ZSB0aGVzZSB2YXJpYWJsZXMsIHNvIHRoZXJlIHNob3VsZCBiZVxyXG4vLyBubyBydW50aW1lIHBlbmFsdHkgZm9yIHRoZXNlLlxyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8zMl9EQkwgPSBUV09fUFdSXzE2X0RCTCAqIFRXT19QV1JfMTZfREJMO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFpFUk8gPSBmcm9tSW50KDApO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCB6ZXJvLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlpFUk8gPSBaRVJPO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFVuc2lnbmVkIHplcm8uXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVVpFUk8gPSBVWkVSTztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE9ORSA9IGZyb21JbnQoMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5PTkUgPSBPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVT05FID0gZnJvbUludCgxLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBVbnNpZ25lZCBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVU9ORSA9IFVPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBORUdfT05FID0gZnJvbUludCgtMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5ORUdfT05FID0gTkVHX09ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDB4RkZGRkZGRkZ8MCwgMHg3RkZGRkZGRnwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoMHhGRkZGRkZGRnwwLCAweEZGRkZGRkZGfDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIE1heGltdW0gdW5zaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWluaW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBMb25nLnByb3RvdHlwZVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBMb25nUHJvdG90eXBlID0gTG9uZy5wcm90b3R5cGU7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSAzMiBiaXQgaW50ZWdlciwgYXNzdW1pbmcgaXQgaXMgYSAzMiBiaXQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiB0b0ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHRoZSBuZWFyZXN0IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWUgKGRvdWJsZSwgNTMgYml0IG1hbnRpc3NhKS5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlcigpIHtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiAoKHRoaXMuaGlnaCA+Pj4gMCkgKiBUV09fUFdSXzMyX0RCTCkgKyAodGhpcy5sb3cgPj4+IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHN0cmluZyB3cml0dGVuIGluIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggUmFkaXggKDItMzYpLCBkZWZhdWx0cyB0byAxMFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAb3ZlcnJpZGVcclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYHJhZGl4YCBpcyBvdXQgb2YgcmFuZ2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkge1xyXG4gICAgcmFkaXggPSByYWRpeCB8fCAxMDtcclxuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcclxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCcpO1xyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgeyAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBMb25nIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXHJcbiAgICAgICAgICAgIC8vIHRoZSBib3R0b20tbW9zdCBkaWdpdCBpbiB0aGlzIGJhc2UgYW5kIHRoZW4gcmVjdXJzZSB0byBkbyB0aGUgcmVzdC5cclxuICAgICAgICAgICAgdmFyIHJhZGl4TG9uZyA9IGZyb21OdW1iZXIocmFkaXgpLFxyXG4gICAgICAgICAgICAgICAgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSxcclxuICAgICAgICAgICAgICAgIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZygpLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSxcclxuICAgICAgICByZW0gPSB0aGlzO1xyXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLFxyXG4gICAgICAgICAgICBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCxcclxuICAgICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgICAgICByZW0gPSByZW1EaXY7XHJcbiAgICAgICAgaWYgKHJlbS5pc1plcm8oKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gJzAnICsgZGlnaXRzO1xyXG4gICAgICAgICAgICByZXN1bHQgPSAnJyArIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2g7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGhpZ2ggYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxvdyA+Pj4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5lcShNSU5fVkFMVUUpID8gNjQgOiB0aGlzLm5lZygpLmdldE51bUJpdHNBYnMoKTtcclxuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xyXG4gICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKVxyXG4gICAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoICE9IDAgPyBiaXQgKyAzMyA6IGJpdCArIDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB6ZXJvLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2lzWmVyb30uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBuZWdhdGl2ZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgcG9zaXRpdmUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIG9kZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZXZlbi5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHtcclxuICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgKHRoaXMuaGlnaCA+Pj4gMzEpID09PSAxICYmIChvdGhlci5oaWdoID4+PiAzMSkgPT09IDEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxID0gTG9uZ1Byb3RvdHlwZS5lcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90RXF1YWxzID0gZnVuY3Rpb24gbm90RXF1YWxzKG90aGVyKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuZXEoLyogdmFsaWRhdGVzICovIG90aGVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZXEgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlc3NUaGFuID0gZnVuY3Rpb24gbGVzc1RoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcclxuICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIGlmICh0aGlzLmVxKG90aGVyKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXHJcbiAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XHJcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YihvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xyXG4gICAgLy8gQm90aCBhcmUgcG9zaXRpdmUgaWYgYXQgbGVhc3Qgb25lIGlzIHVuc2lnbmVkXHJcbiAgICByZXR1cm4gKG90aGVyLmhpZ2ggPj4+IDApID4gKHRoaXMuaGlnaCA+Pj4gMCkgfHwgKG90aGVyLmhpZ2ggPT09IHRoaXMuaGlnaCAmJiAob3RoZXIubG93ID4+PiAwKSA+ICh0aGlzLmxvdyA+Pj4gMCkpID8gLTEgOiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2NvbXBhcmV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXHJcbiAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQgJiYgdGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICByZXR1cm4gdGhpcy5ub3QoKS5hZGQoT05FKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25lZ2F0ZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWcgPSBMb25nUHJvdG90eXBlLm5lZ2F0ZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBTdW1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkge1xyXG4gICAgaWYgKCFpc0xvbmcoYWRkZW5kKSlcclxuICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cclxuXHJcbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcclxuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBiNDggPSBhZGRlbmQuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcclxuICAgIGMwMCArPSBhMDAgKyBiMDA7XHJcbiAgICBjMTYgKz0gYzAwID4+PiAxNjtcclxuICAgIGMwMCAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTE2ICsgYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiArIGIzMjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGM0OCArPSBhNDggKyBiNDg7XHJcbiAgICBjNDggJj0gMHhGRkZGO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKChjMTYgPDwgMTYpIHwgYzAwLCAoYzQ4IDw8IDE2KSB8IGMzMiwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcclxuICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKVxyXG4gICAgICAgIHN1YnRyYWhlbmQgPSBmcm9tVmFsdWUoc3VidHJhaGVuZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc3VidHJhY3R9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBEaWZmZXJlbmNlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnN1YiA9IExvbmdQcm90b3R5cGUuc3VidHJhY3Q7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUHJvZHVjdFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpXHJcbiAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLmhpZ2gpO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPO1xyXG4gICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcclxuXHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTtcclxuICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpO1xyXG5cclxuICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cclxuICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpLCB0aGlzLnVuc2lnbmVkKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cclxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXHJcblxyXG4gICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcclxuICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcclxuICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xyXG4gICAgYzAwICs9IGEwMCAqIGIwMDtcclxuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xyXG4gICAgYzAwICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMTYgKiBiMDA7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTAwICogYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiAqIGIwMDtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMTYgKiBiMTY7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTAwICogYjMyO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODtcclxuICAgIGM0OCAmPSAweEZGRkY7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtdWx0aXBseX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcclxuICovXHJcbkxvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoZSByZXN1bHQgaXMgc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyBzaWduZWQgb3JcclxuICogIHVuc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyB1bnNpZ25lZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikge1xyXG4gICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpXHJcbiAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTtcclxuICAgIGlmIChkaXZpc29yLmlzWmVybygpKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc2lnbmVkIGRpdmlzaW9uIG92ZXJmbG93OiB0aGUgbGFyZ2VzdFxyXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciAvIC0xIHdvdWxkIGJlIDEgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3RcclxuICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIsIGR1ZSB0byB0d28ncyBjb21wbGVtZW50LlxyXG4gICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmhpZ2ggPT09IC0weDgwMDAwMDAwICYmXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgd2l0aCBub24td2FzbSBjb2RlIHBhdGhcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20uZGl2X3UgOiB3YXNtLmRpdl9zKShcclxuICAgICAgICAgICAgdGhpcy5sb3csXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgZGl2aXNvci5sb3csXHJcbiAgICAgICAgICAgIGRpdmlzb3IuaGlnaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIHZhciBhcHByb3gsIHJlbSwgcmVzO1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKSB7XHJcbiAgICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHNpZ25lZCBsb25ncyBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZVxyXG4gICAgICAgIC8vIGNsb3N1cmUgbGlicmFyeSBhcyBhIHdob2xlLlxyXG4gICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsgIC8vIHJlY2FsbCB0aGF0IC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPTkU7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGZUaGlzID0gdGhpcy5zaHIoMSk7XHJcbiAgICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGFwcHJveC5hZGQocmVtLmRpdihkaXZpc29yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpO1xyXG4gICAgICAgIHJlcyA9IFpFUk87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRoZSBhbGdvcml0aG0gYmVsb3cgaGFzIG5vdCBiZWVuIG1hZGUgZm9yIHVuc2lnbmVkIGxvbmdzLiBJdCdzIHRoZXJlZm9yZVxyXG4gICAgICAgIC8vIHJlcXVpcmVkIHRvIHRha2Ugc3BlY2lhbCBjYXJlIG9mIHRoZSBNU0IgcHJpb3IgdG8gcnVubmluZyBpdC5cclxuICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpXHJcbiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTtcclxuICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSlcclxuICAgICAgICAgICAgcmV0dXJuIFVaRVJPO1xyXG4gICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMuc2hydSgxKSkpIC8vIDE1ID4+PiAxID0gNyA7IHdpdGggZGl2aXNvciA9IDggOyB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBVT05FO1xyXG4gICAgICAgIHJlcyA9IFVaRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXHJcbiAgICAvLyBmbG9hdGluZy1wb2ludCB0aGF0IGFwcHJveGltYXRlcyByZW1haW5kZXIgLyBvdGhlciAqZnJvbSBiZWxvdyosIGFkZCB0aGlzXHJcbiAgICAvLyBpbnRvIHRoZSByZXN1bHQsIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSByZW1haW5kZXIuICBJdCBpcyBjcml0aWNhbCB0aGF0XHJcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXHJcbiAgICAvLyByZW1haW5kZXIgbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgIHJlbSA9IHRoaXM7XHJcbiAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkge1xyXG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcclxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCB2YWx1ZS5cclxuICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7XHJcblxyXG4gICAgICAgIC8vIFdlIHdpbGwgdHdlYWsgdGhlIGFwcHJveGltYXRlIHJlc3VsdCBieSBjaGFuZ2luZyBpdCBpbiB0aGUgNDgtdGggZGlnaXQgb3JcclxuICAgICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXHJcbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgZGVsdGEgPSAobG9nMiA8PSA0OCkgPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLFxyXG5cclxuICAgICAgICAvLyBEZWNyZWFzZSB0aGUgYXBwcm94aW1hdGlvbiB1bnRpbCBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlbWFpbmRlci4gIE5vdGVcclxuICAgICAgICAvLyB0aGF0IGlmIGl0IGlzIHRvbyBsYXJnZSwgdGhlIHByb2R1Y3Qgb3ZlcmZsb3dzIGFuZCBpcyBuZWdhdGl2ZS5cclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLFxyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ndChyZW0pKSB7XHJcbiAgICAgICAgICAgIGFwcHJveCAtPSBkZWx0YTtcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXHJcbiAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlIHdlIHdvdWxkIG1ha2Ugbm8gcHJvZ3Jlc3MuXHJcbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSlcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gT05FO1xyXG5cclxuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XHJcbiAgICAgICAgcmVtID0gcmVtLnN1YihhcHByb3hSZW0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZGl2aWRlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZHVsbyA9IGZ1bmN0aW9uIG1vZHVsbyhkaXZpc29yKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSlcclxuICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLnJlbV91IDogd2FzbS5yZW1fcykoXHJcbiAgICAgICAgICAgIHRoaXMubG93LFxyXG4gICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93LFxyXG4gICAgICAgICAgICBkaXZpc29yLmhpZ2hcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI21vZHVsb30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5yZW0gPSBMb25nUHJvdG90eXBlLm1vZHVsbztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgT1Igb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIExvbmcgYW5kIHRoZSBnaXZlbiBvbmUuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcihvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsICh0aGlzLmhpZ2ggPDwgbnVtQml0cykgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG51bUJpdHMpKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IChudW1CaXRzIC0gMzIpLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0TGVmdH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoKHRoaXMubG93ID4+PiBudW1CaXRzKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hyID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIG51bUJpdHMgJj0gNjM7XHJcbiAgICBpZiAobnVtQml0cyA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoO1xyXG4gICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93O1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoKGxvdyA+Pj4gbnVtQml0cykgfCAoaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtQml0cyA9PT0gMzIpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoLCAwLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiAobnVtQml0cyAtIDMyKSwgMCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJfdSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBzaWduZWQuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHtcclxuICAgIGlmICghdGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIHVuc2lnbmVkLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFVuc2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGxlIFdoZXRoZXIgbGl0dGxlIG9yIGJpZyBlbmRpYW4sIGRlZmF1bHRzIHRvIGJpZyBlbmRpYW5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gQnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcyhsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgbG8gICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gMjRcclxuICAgIF07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzQkUgPSBmdW5jdGlvbiB0b0J5dGVzQkUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaGkgPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBsbyAgICAgICAgJiAweGZmXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBCeXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtib29sZWFuPX0gbGUgV2hldGhlciBsaXR0bGUgb3IgYmlnIGVuZGlhbiwgZGVmYXVsdHMgdG8gYmlnIGVuZGlhblxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMoYnl0ZXMsIHVuc2lnbmVkLCBsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gTG9uZy5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZy5mcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcoXHJcbiAgICAgICAgYnl0ZXNbMF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzFdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1syXSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbM10gPDwgMjQsXHJcbiAgICAgICAgYnl0ZXNbNF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzVdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s2XSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbN10gPDwgMjQsXHJcbiAgICAgICAgdW5zaWduZWRcclxuICAgICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhcclxuICAgICAgICBieXRlc1s0XSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbNV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzZdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s3XSxcclxuICAgICAgICBieXRlc1swXSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbMV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzJdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1szXSxcclxuICAgICAgICB1bnNpZ25lZFxyXG4gICAgKTtcclxufTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhclNoYXBlIHtcbiAgaWQ6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IE5QQyAqL1xuICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gdXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VGZW1hbGUgKi9cbiAgYm9keVNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gQ29sb3IzKFIgPSAwLjZmLCBHID0gMC40NjJmLCBCID0gMC4zNTZmKSAqL1xuICBza2luQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuMjgzZiwgRyA9IDAuMTQyZiwgQiA9IDBmKSAqL1xuICBoYWlyQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuNmYsIEcgPSAwLjQ2MmYsIEIgPSAwLjM1NmYpICovXG4gIGV5ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIGV4cHJlc3Npb25UcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB0aW1lc3RhbXAgKi9cbiAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGFsa2luZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIGRlZmF1bHQgPSBbXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9leWVzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZWJyb3dzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX21vdXRoXzAwXCJcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN0YW5kYXJkX2hhaXJcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc2ltcGxlX3llbGxvd190c2hpcnRcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfYnJvd25fdHJvdXNlcnNcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmJ1bl9zaG9lc1wiXVxuICAgKi9cbiAgd2VhcmFibGVzOiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJTaGFwZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGJvZHlTaGFwZTogdW5kZWZpbmVkLFxuICAgIHNraW5Db2xvcjogdW5kZWZpbmVkLFxuICAgIGhhaXJDb2xvcjogdW5kZWZpbmVkLFxuICAgIGV5ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgZXhwcmVzc2lvblRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgdGFsa2luZzogdW5kZWZpbmVkLFxuICAgIHdlYXJhYmxlczogW11cbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9keVNoYXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmJvZHlTaGFwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2tpbkNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5za2luQ29sb3IsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGFpckNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5oYWlyQ29sb3IsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXllQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmV5ZUNvbG9yLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NCkuaW50NjQobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFsa2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5ib29sKG1lc3NhZ2UudGFsa2luZylcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uud2VhcmFibGVzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcodiEpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5ib2R5U2hhcGUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5za2luQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmhhaXJDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZXllQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRhbGtpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLndlYXJhYmxlcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZGVjbGFyZSB2YXIgc2VsZjogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueSB8IHVuZGVmaW5lZFxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWRcbnZhciBnbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsVGhpc1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZlxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3dcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsXG4gIHRocm93ICdVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnXG59KSgpXG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoJ1ZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSJylcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpXG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueVxuICBfbTAuY29uZmlndXJlKClcbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJTaGFwZSB9IGZyb20gJy4vcGIvQXZhdGFyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyU2hhcGUge1xuICAgIHJldHVybiBQQkF2YXRhclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJpbGxib2FyZCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgeD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB5PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHo/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJpbGxib2FyZCgpOiBQQkJpbGxib2FyZCB7XG4gIHJldHVybiB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkLCB6OiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJpbGxib2FyZCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQmlsbGJvYXJkLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS55KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS56ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS56KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCaWxsYm9hcmQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQmlsbGJvYXJkKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS54ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UueiA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCaWxsYm9hcmQgfSBmcm9tICcuL3BiL0JpbGxib2FyZC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDkwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmRTY2hlbWE6IElTY2hlbWE8UEJCaWxsYm9hcmQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQmlsbGJvYXJkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJCaWxsYm9hcmQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQmlsbGJvYXJkIHtcbiAgICByZXR1cm4gUEJCaWxsYm9hcmQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkJpbGxib2FyZCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQmlsbGJvYXJkLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCb3hTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJveFNoYXBlKCk6IFBCQm94U2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQm94U2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkJveFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkJveFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkJveFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQm94U2hhcGUgfSBmcm9tICcuL3BiL0JveFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQm94U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQm94U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJveFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJveFNoYXBlIHtcbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQm94U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ2FtZXJhTW9kZVZhbHVlIH0gZnJvbSAnLi9jb21tb24vQ2FtZXJhTW9kZVZhbHVlLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ2FtZXJhTW9kZSB7XG4gIG1vZGU6IENhbWVyYU1vZGVWYWx1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKCk6IFBCQ2FtZXJhTW9kZSB7XG4gIHJldHVybiB7IG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkNhbWVyYU1vZGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tb2RlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZSB9IGZyb20gJy4vcGIvQ2FtZXJhTW9kZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDYW1lcmFNb2RlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDYW1lcmFNb2RlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGUge1xuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkNhbWVyYU1vZGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDYW1lcmFNb2RlVmFsdWUgfSBmcm9tICcuL2NvbW1vbi9DYW1lcmFNb2RlVmFsdWUuZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDYW1lcmFNb2RlQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbW9kZTogQ2FtZXJhTW9kZVZhbHVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGVBcmVhKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICByZXR1cm4geyBhcmVhOiB1bmRlZmluZWQsIG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGVBcmVhID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDYW1lcmFNb2RlQXJlYSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFyZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5hcmVhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1vZGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZUFyZWEoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmFyZWEgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZUFyZWEgfSBmcm9tICcuL3BiL0NhbWVyYU1vZGVBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZUFyZWE+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ2FtZXJhTW9kZUFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkNhbWVyYU1vZGVBcmVhLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGVBcmVhLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDeWxpbmRlclNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCxcbiAgICBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIHJhZGl1c1RvcDogdW5kZWZpbmVkLFxuICAgIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDeWxpbmRlclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDeWxpbmRlclNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLnJhZGl1c1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ3lsaW5kZXJTaGFwZSB9IGZyb20gJy4vcGIvQ3lsaW5kZXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQ3lsaW5kZXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDeWxpbmRlclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDeWxpbmRlclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkdMVEZTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKTogUEJHTFRGU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgc3JjOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCR0xURlNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJHTFRGU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJHTFRGU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCR0xURlNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCR0xURlNoYXBlIH0gZnJvbSAnLi9wYi9HTFRGU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCR0xURlNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkdMVEZTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCR0xURlNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkdMVEZTaGFwZSB7XG4gICAgcmV0dXJuIFBCR0xURlNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJHTFRGU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gVGV4dHVyZVdyYXBNb2RlIHtcbiAgUmVwZWF0ID0gMCxcbiAgQ2xhbXAgPSAxLFxuICBNaXJyb3IgPSAyLFxuICBNaXJyb3JPbmNlID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyTW9kZSB7XG4gIFBvaW50ID0gMCxcbiAgQmlsaW5lYXIgPSAxLFxuICBUcmlsaW5lYXIgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUcmFuc3BhcmVuY3lNb2RlIHtcbiAgT3BhcXVlID0gMCxcbiAgQWxwaGFUZXN0ID0gMSxcbiAgQWxwaGFCbGVuZCA9IDIsXG4gIEFscGhhVGVzdEFuZEFscGhhQmxlbmQgPSAzLFxuICBBdXRvID0gNCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsIHtcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIHRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUuIHJhbmdlIHZhbHVlOiBmcm9tIDAgdG8gMSAqL1xuICBhbHBoYVRlc3Q/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAgdHJ1ZSAqL1xuICBjYXN0U2hhZG93cz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGFscGhhVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgZW1pc3NpdmVUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBidW1wVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IHdoaXRlOyAqL1xuICBhbGJlZG9Db2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IGJsYWNrOyAqL1xuICBlbWlzc2l2ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gd2hpdGU7ICovXG4gIHJlZmxlY3Rpdml0eUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gVHJhbnNwYXJlbmN5TW9kZS5BdXRvICovXG4gIHRyYW5zcGFyZW5jeU1vZGU/OiBUcmFuc3BhcmVuY3lNb2RlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIG1ldGFsbGljPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIHJvdWdobmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgZ2xvc3NpbmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgc3BlY3VsYXJJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAyICovXG4gIGVtaXNzaXZlSW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBkaXJlY3RJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsX1RleHR1cmUge1xuICBzcmM6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IFRleHR1cmVXcmFwTW9kZS5DbGFtcCAqL1xuICB3cmFwTW9kZT86IFRleHR1cmVXcmFwTW9kZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IEZpbHRlck1vZGUuQmlsaW5lYXIgKi9cbiAgZmlsdGVyTW9kZT86IEZpbHRlck1vZGUgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWF0ZXJpYWwoKTogUEJNYXRlcmlhbCB7XG4gIHJldHVybiB7XG4gICAgdGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGFscGhhVGVzdDogdW5kZWZpbmVkLFxuICAgIGNhc3RTaGFkb3dzOiB1bmRlZmluZWQsXG4gICAgYWxwaGFUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYnVtcFRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBhbGJlZG9Db2xvcjogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICByZWZsZWN0aXZpdHlDb2xvcjogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW5jeU1vZGU6IHVuZGVmaW5lZCxcbiAgICBtZXRhbGxpYzogdW5kZWZpbmVkLFxuICAgIHJvdWdobmVzczogdW5kZWZpbmVkLFxuICAgIGdsb3NzaW5lc3M6IHVuZGVmaW5lZCxcbiAgICBzcGVjdWxhckludGVuc2l0eTogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlSW50ZW5zaXR5OiB1bmRlZmluZWQsXG4gICAgZGlyZWN0SW50ZW5zaXR5OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1hdGVyaWFsID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLnRleHR1cmUsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UuYWxwaGFUZXN0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jYXN0U2hhZG93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuY2FzdFNoYWRvd3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFscGhhVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuYWxwaGFUZXh0dXJlLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJ1bXBUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5idW1wVGV4dHVyZSwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGJlZG9Db2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuYWxiZWRvQ29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciwgd3JpdGVyLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IsIHdyaXRlci51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1ldGFsbGljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UubWV0YWxsaWMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwMSkuZmxvYXQobWVzc2FnZS5yb3VnaG5lc3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdsb3NzaW5lc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDkpLmZsb2F0KG1lc3NhZ2UuZ2xvc3NpbmVzcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzMpLmZsb2F0KG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNYXRlcmlhbCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYWxwaGFUZXN0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5jYXN0U2hhZG93cyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbHBoYVRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuYnVtcFRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmFsYmVkb0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UubWV0YWxsaWMgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5yb3VnaG5lc3MgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5nbG9zc2luZXNzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdEludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1hdGVyaWFsX1RleHR1cmUoKTogUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgcmV0dXJuIHsgc3JjOiAnJywgd3JhcE1vZGU6IHVuZGVmaW5lZCwgZmlsdGVyTW9kZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNYXRlcmlhbF9UZXh0dXJlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbF9UZXh0dXJlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53cmFwTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLndyYXBNb2RlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5maWx0ZXJNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UuZmlsdGVyTW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbF9UZXh0dXJlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS53cmFwTW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZpbHRlck1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJNYXRlcmlhbCB9IGZyb20gJy4vcGIvTWF0ZXJpYWwuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxN1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWF0ZXJpYWxTY2hlbWE6IElTY2hlbWE8UEJNYXRlcmlhbD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNYXRlcmlhbCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWF0ZXJpYWwuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTWF0ZXJpYWwge1xuICAgIHJldHVybiBQQk1hdGVyaWFsLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNYXRlcmlhbCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTWF0ZXJpYWwuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sbGlkZXJMYXllciB7XG4gIE5vbmUgPSAwLFxuICBQb2ludGVyID0gMSxcbiAgUGh5c2ljcyA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXIge1xuICAvKiogZGVmYXVsdCA9IENvbGxpZGVyTGF5ZXIuUGh5c2ljcyB8IENvbGxpZGVyTGF5ZXIuUG9pbnRlciAqL1xuICBjb2xsaXNpb25NYXNrPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGJveDogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB7XG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge31cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgcmV0dXJuIHsgY29sbGlzaW9uTWFzazogdW5kZWZpbmVkLCBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaENvbGxpZGVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY29sbGlzaW9uTWFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuY29sbGlzaW9uTWFzaylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbGxpc2lvbk1hc2sgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaENvbGxpZGVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoKCk6IFBCTWVzaENvbGxpZGVyX0JveE1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoKCk6IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hDb2xsaWRlciB9IGZyb20gJy4vcGIvTWVzaENvbGxpZGVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hDb2xsaWRlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoQ29sbGlkZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hDb2xsaWRlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoQ29sbGlkZXIge1xuICAgIHJldHVybiBQQk1lc2hDb2xsaWRlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoQ29sbGlkZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlciB7XG4gIGJveDogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gIHV2czogbnVtYmVyW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICB1dnM6IG51bWJlcltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7fVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKTogUEJNZXNoUmVuZGVyZXIge1xuICByZXR1cm4geyBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICByZXR1cm4geyB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7IHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hSZW5kZXJlciB9IGZyb20gJy4vcGIvTWVzaFJlbmRlcmVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMThcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hSZW5kZXJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoUmVuZGVyZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hSZW5kZXJlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIHJldHVybiBQQk1lc2hSZW5kZXJlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoUmVuZGVyZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xuICBhc3NldElkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHN0eWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk5GVFNoYXBlKCk6IFBCTkZUU2hhcGUge1xuICByZXR1cm4ge1xuICAgIHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsXG4gICAgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBzcmM6ICcnLFxuICAgIGFzc2V0SWQ6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk5GVFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJORlRTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFzc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXNzZXRJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5zdHlsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmNvbG9yLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk5GVFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk5GVFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuYXNzZXRJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5jb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyRG93biB7XG4gIC8qKiBkZWZhdWx0PUFjdGlvbkJ1dHRvbi5BTlkgKi9cbiAgYnV0dG9uPzogQWN0aW9uQnV0dG9uIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdJbnRlcmFjdCcgKi9cbiAgaG92ZXJUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIG1heERpc3RhbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgc2hvd0ZlZWRiYWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duKCk6IFBCT25Qb2ludGVyRG93biB7XG4gIHJldHVybiB7IGJ1dHRvbjogdW5kZWZpbmVkLCBob3ZlclRleHQ6IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IHVuZGVmaW5lZCwgc2hvd0ZlZWRiYWNrOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93bigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaG92ZXJUZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWF4RGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNob3dGZWVkYmFjayA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25TY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd24sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd24uZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93biB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93biB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICBidXR0b246IEFjdGlvbkJ1dHRvblxuICBtZXNoTmFtZTogc3RyaW5nXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgcG9pbnQ6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93blJlc3VsdCgpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd25SZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXNoTmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLm1lc2hOYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9pbnQsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9ybWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uubm9ybWFsLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3RhbmNlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY5KS5mbG9hdChtZXNzYWdlLmRpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50aW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd25SZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1lc2hOYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UucG9pbnQgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5ub3JtYWwgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5kaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duUmVzdWx0IH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjZcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duUmVzdWx0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd25SZXN1bHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwIHtcbiAgLyoqIGRlZmF1bHQ9QWN0aW9uQnV0dG9uLkFOWSAqL1xuICBidXR0b24/OiBBY3Rpb25CdXR0b24gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J0ludGVyYWN0JyAqL1xuICBob3ZlclRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgbWF4RGlzdGFuY2U/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBzaG93RmVlZGJhY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKCk6IFBCT25Qb2ludGVyVXAge1xuICByZXR1cm4geyBidXR0b246IHVuZGVmaW5lZCwgaG92ZXJUZXh0OiB1bmRlZmluZWQsIG1heERpc3RhbmNlOiB1bmRlZmluZWQsIHNob3dGZWVkYmFjazogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJVcCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyVXAsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5ob3ZlclRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhEaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlclVwIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJVcC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDYxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlclVwPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlclVwLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJVcC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJVcCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXAuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlclVwIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgbWVzaE5hbWU6IHN0cmluZ1xuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIHBvaW50OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG5vcm1hbDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXN0YW5jZTogbnVtYmVyXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlclVwUmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJVcFJlc3VsdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc2hOYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm9yaWdpbiwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5kaXJlY3Rpb24sIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5wb2ludCwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWwsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzdGFuY2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjkpLmZsb2F0KG1lc3NhZ2UuZGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS50aW1lc3RhbXApXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tZXNoTmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uubm9ybWFsID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyVXBSZXN1bHQgfSBmcm9tICcuL3BiL09uUG9pbnRlclVwUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjVcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyVXBSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyVXBSZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlclVwUmVzdWx0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcFJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlclVwUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQbGFuZVNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUGxhbmVTaGFwZSgpOiBQQlBsYW5lU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUGxhbmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUGxhbmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQbGFuZVNoYXBlIH0gZnJvbSAnLi9wYi9QbGFuZVNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJQbGFuZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBsYW5lU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBsYW5lU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUGxhbmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gUG9pbnRlckV2ZW50VHlwZSB7XG4gIFVQID0gMCxcbiAgRE9XTiA9IDEsXG4gIEhPVkVSX0VOVEVSID0gMixcbiAgSE9WRVJfTEVBVkUgPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCUG9pbnRlckV2ZW50cyB7XG4gIHBvaW50ZXJFdmVudHM6IFBCUG9pbnRlckV2ZW50c19FbnRyeVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyRXZlbnRzX0luZm8ge1xuICAvKiogZGVmYXVsdD1BY3Rpb25CdXR0b24uQU5ZICovXG4gIGJ1dHRvbj86IEFjdGlvbkJ1dHRvbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nSW50ZXJhY3QnICovXG4gIGhvdmVyVGV4dD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xMCAqL1xuICBtYXhEaXN0YW5jZT86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHNob3dGZWVkYmFjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQlBvaW50ZXJFdmVudHNfRW50cnkge1xuICBldmVudFR5cGU6IFBvaW50ZXJFdmVudFR5cGVcbiAgZXZlbnRJbmZvOiBQQlBvaW50ZXJFdmVudHNfSW5mbyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQb2ludGVyRXZlbnRzKCk6IFBCUG9pbnRlckV2ZW50cyB7XG4gIHJldHVybiB7IHBvaW50ZXJFdmVudHM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJQb2ludGVyRXZlbnRzID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyRXZlbnRzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UucG9pbnRlckV2ZW50cykge1xuICAgICAgUEJQb2ludGVyRXZlbnRzX0VudHJ5LmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ZXJFdmVudHMucHVzaChQQlBvaW50ZXJFdmVudHNfRW50cnkuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckV2ZW50c19JbmZvKCk6IFBCUG9pbnRlckV2ZW50c19JbmZvIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiB1bmRlZmluZWQsIGhvdmVyVGV4dDogdW5kZWZpbmVkLCBtYXhEaXN0YW5jZTogdW5kZWZpbmVkLCBzaG93RmVlZGJhY2s6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckV2ZW50c19JbmZvID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyRXZlbnRzX0luZm8sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBvaW50ZXJFdmVudHNfSW5mbyB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQb2ludGVyRXZlbnRzX0luZm8oKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhvdmVyVGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5zaG93RmVlZGJhY2sgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNfRW50cnkoKTogUEJQb2ludGVyRXZlbnRzX0VudHJ5IHtcbiAgcmV0dXJuIHsgZXZlbnRUeXBlOiAwLCBldmVudEluZm86IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckV2ZW50c19FbnRyeSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUG9pbnRlckV2ZW50c19FbnRyeSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmV2ZW50VHlwZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmV2ZW50VHlwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXZlbnRJbmZvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCUG9pbnRlckV2ZW50c19JbmZvLmVuY29kZShtZXNzYWdlLmV2ZW50SW5mbywgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzX0VudHJ5IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNfRW50cnkoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmV2ZW50VHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmV2ZW50SW5mbyA9IFBCUG9pbnRlckV2ZW50c19JbmZvLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi9wYi9Qb2ludGVyRXZlbnRzLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJFdmVudHNTY2hlbWE6IElTY2hlbWE8UEJQb2ludGVyRXZlbnRzPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBvaW50ZXJFdmVudHMsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBvaW50ZXJFdmVudHMuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUG9pbnRlckV2ZW50cyB7XG4gICAgcmV0dXJuIFBCUG9pbnRlckV2ZW50cy5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUG9pbnRlckV2ZW50cyB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUG9pbnRlckV2ZW50cy5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBMb25nIGZyb20gJ2xvbmcnXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlJheWNhc3RSZXN1bHQge1xuICB0aW1lc3RhbXA6IG51bWJlclxuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGhpdHM6IFJheWNhc3RIaXRbXVxufVxuXG4vKiogUG9zaXRpb24gd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgc2NlbmUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF5Y2FzdEhpdCB7XG4gIHBvc2l0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsSGl0OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGxlbmd0aDogbnVtYmVyXG4gIG1lc2hOYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGVudGl0eUlkPzogbnVtYmVyIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlJheWNhc3RSZXN1bHQoKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgcmV0dXJuIHsgdGltZXN0YW1wOiAwLCBvcmlnaW46IHVuZGVmaW5lZCwgZGlyZWN0aW9uOiB1bmRlZmluZWQsIGhpdHM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJSYXljYXN0UmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJSYXljYXN0UmVzdWx0LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDI2KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLmhpdHMpIHtcbiAgICAgIFJheWNhc3RIaXQuZW5jb2RlKHYhLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlJheWNhc3RSZXN1bHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCUmF5Y2FzdFJlc3VsdCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5vcmlnaW4gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5oaXRzLnB1c2goUmF5Y2FzdEhpdC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUmF5Y2FzdEhpdCgpOiBSYXljYXN0SGl0IHtcbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogdW5kZWZpbmVkLFxuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRpcmVjdGlvbjogdW5kZWZpbmVkLFxuICAgIG5vcm1hbEhpdDogdW5kZWZpbmVkLFxuICAgIGxlbmd0aDogMCxcbiAgICBtZXNoTmFtZTogdW5kZWZpbmVkLFxuICAgIGVudGl0eUlkOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSYXljYXN0SGl0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUmF5Y2FzdEhpdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9zaXRpb24sIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWxIaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWxIaXQsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLmxlbmd0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWVzaE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MCkuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVudGl0eUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTYpLmludDY0KG1lc3NhZ2UuZW50aXR5SWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBSYXljYXN0SGl0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VSYXljYXN0SGl0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm5vcm1hbEhpdCA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmxlbmd0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubWVzaE5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5lbnRpdHlJZCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5kZWNsYXJlIHZhciBzZWxmOiBhbnkgfCB1bmRlZmluZWRcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueSB8IHVuZGVmaW5lZFxudmFyIGdsb2JhbFRoaXM6IGFueSA9ICgoKSA9PiB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxUaGlzXG4gIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBzZWxmXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvd1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBnbG9iYWxcbiAgdGhyb3cgJ1VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCdcbn0pKClcblxuZnVuY3Rpb24gbG9uZ1RvTnVtYmVyKGxvbmc6IExvbmcpOiBudW1iZXIge1xuICBpZiAobG9uZy5ndChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpIHtcbiAgICB0aHJvdyBuZXcgZ2xvYmFsVGhpcy5FcnJvcignVmFsdWUgaXMgbGFyZ2VyIHRoYW4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVInKVxuICB9XG4gIHJldHVybiBsb25nLnRvTnVtYmVyKClcbn1cblxuaWYgKF9tMC51dGlsLkxvbmcgIT09IExvbmcpIHtcbiAgX20wLnV0aWwuTG9uZyA9IExvbmcgYXMgYW55XG4gIF9tMC5jb25maWd1cmUoKVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBQb2ludGVyRXZlbnRUeXBlIH0gZnJvbSAnLi9Qb2ludGVyRXZlbnRzLmdlbidcbmltcG9ydCB7IFJheWNhc3RIaXQgfSBmcm9tICcuL1JheWNhc3RSZXN1bHQuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbi8qKiB0aGUgcmVuZGVyZXIgd2lsbCBzZXQgdGhpcyBjb21wb25lbnQgdG8gdGhlIHJvb3QgZW50aXR5IG9uY2UgcGVyIGZyYW1lIHdpdGggYWxsIHRoZSBldmVudHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgLyoqIGEgbGlzdCBvZiB0aGUgbGFzdCBOIHBvaW50ZXIgY29tbWFuZHMgKGZyb20gdGhlIGVuZ2luZSkgKi9cbiAgY29tbWFuZHM6IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZFtdXG59XG5cbi8qKiB0aGlzIG1lc3NhZ2UgcmVwcmVzZW50cyBhIHBvaW50ZXIgZXZlbnQsIHVzZWQgYm90aCBmb3IgVVAgYW5kIERPV04gYWN0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQge1xuICAvKiogaWRlbnRpZmllciBvZiB0aGUgaW5wdXQgKi9cbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgaGl0OiBSYXljYXN0SGl0IHwgdW5kZWZpbmVkXG4gIHN0YXRlOiBQb2ludGVyRXZlbnRUeXBlXG4gIC8qKiBjb3VsZCBiZSBhIExhbXBvcnQgdGltZXN0YW1wICovXG4gIHRpbWVzdGFtcDogbnVtYmVyXG4gIC8qKiBpZiB0aGUgaW5wdXQgaXMgYW5hbG9nIHRoZW4gd2Ugc3RvcmUgaXQgaGVyZSAqL1xuICBhbmFsb2c/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckV2ZW50c1Jlc3VsdCgpOiBQQlBvaW50ZXJFdmVudHNSZXN1bHQge1xuICByZXR1cm4geyBjb21tYW5kczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJFdmVudHNSZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJFdmVudHNSZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5jb21tYW5kcykge1xuICAgICAgUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kLmVuY29kZSh2ISwgd3JpdGVyLnVpbnQzMigxMCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbW1hbmRzLnB1c2goUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQoKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kIHtcbiAgcmV0dXJuIHsgYnV0dG9uOiAwLCBoaXQ6IHVuZGVmaW5lZCwgc3RhdGU6IDAsIHRpbWVzdGFtcDogMCwgYW5hbG9nOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBSYXljYXN0SGl0LmVuY29kZShtZXNzYWdlLmhpdCwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zdGF0ZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuaW50MzIobWVzc2FnZS5zdGF0ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGltZXN0YW1wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYW5hbG9nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTMpLmZsb2F0KG1lc3NhZ2UuYW5hbG9nKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJFdmVudHNSZXN1bHRfUG9pbnRlckNvbW1hbmQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmhpdCA9IFJheWNhc3RIaXQuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5hbmFsb2cgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBvaW50ZXJFdmVudHNSZXN1bHQgfSBmcm9tICcuL3BiL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYTogSVNjaGVtYTxQQlBvaW50ZXJFdmVudHNSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUG9pbnRlckV2ZW50c1Jlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUG9pbnRlckV2ZW50c1Jlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICByZXR1cm4gUEJQb2ludGVyRXZlbnRzUmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJQb2ludGVyRXZlbnRzUmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQb2ludGVyRXZlbnRzUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQb2ludGVyTG9jayB7XG4gIGlzUG9pbnRlckxvY2tlZDogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJQb2ludGVyTG9jaygpOiBQQlBvaW50ZXJMb2NrIHtcbiAgcmV0dXJuIHsgaXNQb2ludGVyTG9ja2VkOiBmYWxzZSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUG9pbnRlckxvY2sgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlBvaW50ZXJMb2NrLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkID09PSB0cnVlKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBvaW50ZXJMb2NrKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJMb2NrZWQgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCUG9pbnRlckxvY2sgfSBmcm9tICcuL3BiL1BvaW50ZXJMb2NrLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrU2NoZW1hOiBJU2NoZW1hPFBCUG9pbnRlckxvY2s+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUG9pbnRlckxvY2ssIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBvaW50ZXJMb2NrLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICByZXR1cm4gUEJQb2ludGVyTG9jay5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUG9pbnRlckxvY2sge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlBvaW50ZXJMb2NrLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFJheWNhc3RRdWVyeVR5cGUge1xuICBISVRfRklSU1QgPSAwLFxuICBRVUVSWV9BTEwgPSAxLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCUmF5Y2FzdCB7XG4gIHRpbWVzdGFtcDogbnVtYmVyXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbWF4RGlzdGFuY2U6IG51bWJlclxuICBxdWVyeVR5cGU6IFJheWNhc3RRdWVyeVR5cGVcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUmF5Y2FzdCgpOiBQQlJheWNhc3Qge1xuICByZXR1cm4geyB0aW1lc3RhbXA6IDAsIG9yaWdpbjogdW5kZWZpbmVkLCBkaXJlY3Rpb246IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IDAsIHF1ZXJ5VHlwZTogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUmF5Y2FzdCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUmF5Y2FzdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLnRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uub3JpZ2luLCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmRpcmVjdGlvbiwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXhEaXN0YW5jZSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucXVlcnlUeXBlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLnF1ZXJ5VHlwZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCUmF5Y2FzdCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJSYXljYXN0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS50aW1lc3RhbXAgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm1heERpc3RhbmNlID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5xdWVyeVR5cGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJSYXljYXN0IH0gZnJvbSAnLi9wYi9SYXljYXN0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFJheWNhc3RTY2hlbWE6IElTY2hlbWE8UEJSYXljYXN0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlJheWNhc3QsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlJheWNhc3QuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUmF5Y2FzdCB7XG4gICAgcmV0dXJuIFBCUmF5Y2FzdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUmF5Y2FzdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUmF5Y2FzdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlJheWNhc3RSZXN1bHQgfSBmcm9tICcuL3BiL1JheWNhc3RSZXN1bHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA2OFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmF5Y2FzdFJlc3VsdFNjaGVtYTogSVNjaGVtYTxQQlJheWNhc3RSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCUmF5Y2FzdFJlc3VsdCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCUmF5Y2FzdFJlc3VsdC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgICByZXR1cm4gUEJSYXljYXN0UmVzdWx0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJSYXljYXN0UmVzdWx0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJSYXljYXN0UmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJTcGhlcmVTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgcmV0dXJuIHsgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCwgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLCB2aXNpYmxlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlNwaGVyZVNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJTcGhlcmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJTcGhlcmVTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlNwaGVyZVNoYXBlIH0gZnJvbSAnLi9wYi9TcGhlcmVTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE1XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlNwaGVyZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlNwaGVyZVNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJTcGhlcmVTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlNwaGVyZVNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJTcGhlcmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlRleHRTaGFwZSB7XG4gIHRleHQ6IHN0cmluZ1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgZm9udD86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBmICovXG4gIG9wYWNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgZm9udFNpemU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgZm9udEF1dG9TaXplPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nY2VudGVyJyAqL1xuICBoVGV4dEFsaWduPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdjZW50ZXInICovXG4gIHZUZXh0QWxpZ24/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MSAqL1xuICB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xICovXG4gIGhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdSaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nQm90dG9tPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHBhZGRpbmdMZWZ0PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVTcGFjaW5nPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGxpbmVDb3VudD86IG51bWJlciB8IHVuZGVmaW5lZFxuICB0ZXh0V3JhcHBpbmc/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHNoYWRvd0JsdXI/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc2hhZG93T2Zmc2V0WD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBzaGFkb3dPZmZzZXRZPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIG91dGxpbmVXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIHNoYWRvd0NvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgb3V0bGluZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgdGV4dENvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpOiBQQlRleHRTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogJycsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIGZvbnQ6IHVuZGVmaW5lZCxcbiAgICBvcGFjaXR5OiB1bmRlZmluZWQsXG4gICAgZm9udFNpemU6IHVuZGVmaW5lZCxcbiAgICBmb250QXV0b1NpemU6IHVuZGVmaW5lZCxcbiAgICBoVGV4dEFsaWduOiB1bmRlZmluZWQsXG4gICAgdlRleHRBbGlnbjogdW5kZWZpbmVkLFxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ1RvcDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdSaWdodDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdCb3R0b206IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nTGVmdDogdW5kZWZpbmVkLFxuICAgIGxpbmVTcGFjaW5nOiB1bmRlZmluZWQsXG4gICAgbGluZUNvdW50OiB1bmRlZmluZWQsXG4gICAgdGV4dFdyYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Qmx1cjogdW5kZWZpbmVkLFxuICAgIHNoYWRvd09mZnNldFg6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dPZmZzZXRZOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZVdpZHRoOiB1bmRlZmluZWQsXG4gICAgc2hhZG93Q29sb3I6IHVuZGVmaW5lZCxcbiAgICBvdXRsaW5lQ29sb3I6IHVuZGVmaW5lZCxcbiAgICB0ZXh0Q29sb3I6IHVuZGVmaW5lZFxuICB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVGV4dFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJUZXh0U2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2KS5zdHJpbmcobWVzc2FnZS5mb250KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uub3BhY2l0eSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udFNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NSkuZmxvYXQobWVzc2FnZS5mb250U2l6ZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZm9udEF1dG9TaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5mb250QXV0b1NpemUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhUZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuaFRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudlRleHRBbGlnbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY2KS5zdHJpbmcobWVzc2FnZS52VGV4dEFsaWduKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDc3KS5mbG9hdChtZXNzYWdlLndpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4NSkuZmxvYXQobWVzc2FnZS5oZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig5MykuZmxvYXQobWVzc2FnZS5wYWRkaW5nVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nUmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDEpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA5KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdCb3R0b20pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTE3KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5saW5lU3BhY2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyNSkuZmxvYXQobWVzc2FnZS5saW5lU3BhY2luZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZUNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI4KS5pbnQzMihtZXNzYWdlLmxpbmVDb3VudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dFdyYXBwaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTM2KS5ib29sKG1lc3NhZ2UudGV4dFdyYXBwaW5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dCbHVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTQ5KS5mbG9hdChtZXNzYWdlLnNoYWRvd0JsdXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNTcpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2NSkuZmxvYXQobWVzc2FnZS5zaGFkb3dPZmZzZXRZKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRsaW5lV2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNzMpLmZsb2F0KG1lc3NhZ2Uub3V0bGluZVdpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uuc2hhZG93Q29sb3IsIHdyaXRlci51aW50MzIoMTc4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm91dGxpbmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2Uub3V0bGluZUNvbG9yLCB3cml0ZXIudWludDMyKDE4NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnRleHRDb2xvciwgd3JpdGVyLnVpbnQzMigxOTQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVGV4dFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlRleHRTaGFwZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuZm9udCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9wYWNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmZvbnRTaXplID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgbWVzc2FnZS5mb250QXV0b1NpemUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2UuaFRleHRBbGlnbiA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLnZUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS53aWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLmhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5saW5lU3BhY2luZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmxpbmVDb3VudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICBtZXNzYWdlLnRleHRXcmFwcGluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Qmx1ciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd09mZnNldFggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRZID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZVdpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5vdXRsaW5lQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0Q29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlRleHRTaGFwZSB9IGZyb20gJy4vcGIvVGV4dFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRleHRTaGFwZVNjaGVtYTogSVNjaGVtYTxQQlRleHRTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJUZXh0U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlRleHRTaGFwZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJUZXh0U2hhcGUge1xuICAgIHJldHVybiBQQlRleHRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVGV4dFNoYXBlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFRleHRBbGlnbiB7XG4gIENlbnRlciA9IDAsXG4gIExlZnQgPSAxLFxuICBSaWdodCA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEZvbnQge1xuICBMaWJlcmF0aW9uU2FucyA9IDAsXG4gIFNhbnNTZXJpZiA9IDEsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJVaVRleHQge1xuICB2YWx1ZTogc3RyaW5nXG4gIC8qKiBkZWZhdWx0PSgxLjAsMS4wLDEuMCkgKi9cbiAgY29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J2NlbnRlcicgKi9cbiAgdGV4dEFsaWduPzogVGV4dEFsaWduIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTAgKi9cbiAgZm9udD86IEZvbnQgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgZm9udFNpemU/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVWlUZXh0KCk6IFBCVWlUZXh0IHtcbiAgcmV0dXJuIHsgdmFsdWU6ICcnLCBjb2xvcjogdW5kZWZpbmVkLCB0ZXh0QWxpZ246IHVuZGVmaW5lZCwgZm9udDogdW5kZWZpbmVkLCBmb250U2l6ZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJVaVRleHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlVpVGV4dCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnZhbHVlICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudmFsdWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5jb2xvciwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50ZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuaW50MzIobWVzc2FnZS50ZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuaW50MzIobWVzc2FnZS5mb250KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mb250U2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwKS5pbnQzMihtZXNzYWdlLmZvbnRTaXplKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJVaVRleHQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVWlUZXh0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS52YWx1ZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0QWxpZ24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5mb250ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZm9udFNpemUgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlVpVGV4dCB9IGZyb20gJy4vcGIvVWlUZXh0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNTJcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFVpVGV4dFNjaGVtYTogSVNjaGVtYTxQQlVpVGV4dD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJVaVRleHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlVpVGV4dC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJVaVRleHQge1xuICAgIHJldHVybiBQQlVpVGV4dC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVWlUZXh0IHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJVaVRleHQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gWUdQb3NpdGlvblR5cGUge1xuICBZR1Bvc2l0aW9uVHlwZVN0YXRpYyA9IDAsXG4gIFlHUG9zaXRpb25UeXBlUmVsYXRpdmUgPSAxLFxuICBZR1Bvc2l0aW9uVHlwZUFic29sdXRlID0gMixcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gWUdBbGlnbiB7XG4gIFlHQWxpZ25BdXRvID0gMCxcbiAgWUdBbGlnbkZsZXhTdGFydCA9IDEsXG4gIFlHQWxpZ25DZW50ZXIgPSAyLFxuICBZR0FsaWduRmxleEVuZCA9IDMsXG4gIFlHQWxpZ25TdHJldGNoID0gNCxcbiAgWUdBbGlnbkJhc2VsaW5lID0gNSxcbiAgWUdBbGlnblNwYWNlQmV0d2VlbiA9IDYsXG4gIFlHQWxpZ25TcGFjZUFyb3VuZCA9IDcsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHVW5pdCB7XG4gIFlHVW5pdFVuZGVmaW5lZCA9IDAsXG4gIFlHVW5pdFBvaW50ID0gMSxcbiAgWUdVbml0UGVyY2VudCA9IDIsXG4gIFlHVW5pdEF1dG8gPSAzLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR0RpcmVjdGlvbiB7XG4gIFlHRGlyZWN0aW9uSW5oZXJpdCA9IDAsXG4gIFlHRGlyZWN0aW9uTFRSID0gMSxcbiAgWUdEaXJlY3Rpb25SVEwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR0ZsZXhEaXJlY3Rpb24ge1xuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW4gPSAwLFxuICBZR0ZsZXhEaXJlY3Rpb25Db2x1bW5SZXZlcnNlID0gMSxcbiAgWUdGbGV4RGlyZWN0aW9uUm93ID0gMixcbiAgWUdGbGV4RGlyZWN0aW9uUm93UmV2ZXJzZSA9IDMsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHV3JhcCB7XG4gIFlHV3JhcE5vV3JhcCA9IDAsXG4gIFlHV3JhcFdyYXAgPSAxLFxuICBZR1dyYXBXcmFwUmV2ZXJzZSA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHSnVzdGlmeSB7XG4gIFlHSnVzdGlmeUZsZXhTdGFydCA9IDAsXG4gIFlHSnVzdGlmeUNlbnRlciA9IDEsXG4gIFlHSnVzdGlmeUZsZXhFbmQgPSAyLFxuICBZR0p1c3RpZnlTcGFjZUJldHdlZW4gPSAzLFxuICBZR0p1c3RpZnlTcGFjZUFyb3VuZCA9IDQsXG4gIFlHSnVzdGlmeVNwYWNlRXZlbmx5ID0gNSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gWUdPdmVyZmxvdyB7XG4gIFlHT3ZlcmZsb3dWaXNpYmxlID0gMCxcbiAgWUdPdmVyZmxvd0hpZGRlbiA9IDEsXG4gIFlHT3ZlcmZsb3dTY3JvbGwgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBZR0Rpc3BsYXkge1xuICBZR0Rpc3BsYXlGbGV4ID0gMCxcbiAgWUdEaXNwbGF5Tm9uZSA9IDEsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFlHRWRnZSB7XG4gIFlHRWRnZUxlZnQgPSAwLFxuICBZR0VkZ2VUb3AgPSAxLFxuICBZR0VkZ2VSaWdodCA9IDIsXG4gIFlHRWRnZUJvdHRvbSA9IDMsXG4gIFlHRWRnZVN0YXJ0ID0gNCxcbiAgWUdFZGdlRW5kID0gNSxcbiAgWUdFZGdlSG9yaXpvbnRhbCA9IDYsXG4gIFlHRWRnZVZlcnRpY2FsID0gNyxcbiAgWUdFZGdlQWxsID0gOCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQlVpVHJhbnNmb3JtIHtcbiAgcGFyZW50OiBudW1iZXJcbiAgcmlnaHRPZjogbnVtYmVyXG4gIHBvc2l0aW9uVHlwZTogWUdQb3NpdGlvblR5cGVcbiAgYWxpZ25Db250ZW50OiBZR0FsaWduXG4gIGFsaWduSXRlbXM6IFlHQWxpZ25cbiAgYWxpZ25TZWxmOiBZR0FsaWduXG4gIGZsZXhEaXJlY3Rpb246IFlHRmxleERpcmVjdGlvblxuICBmbGV4V3JhcDogWUdXcmFwXG4gIGp1c3RpZnlDb250ZW50OiBZR0p1c3RpZnlcbiAgb3ZlcmZsb3c6IFlHT3ZlcmZsb3dcbiAgZGlzcGxheTogWUdEaXNwbGF5XG4gIGRpcmVjdGlvbjogWUdEaXJlY3Rpb25cbiAgZmxleDogbnVtYmVyXG4gIGZsZXhCYXNpc1VuaXQ6IFlHVW5pdFxuICBmbGV4QmFzaXM6IG51bWJlclxuICBmbGV4R3JvdzogbnVtYmVyXG4gIGZsZXhTaHJpbms6IG51bWJlclxuICB3aWR0aFVuaXQ6IFlHVW5pdFxuICB3aWR0aDogbnVtYmVyXG4gIGhlaWdodFVuaXQ6IFlHVW5pdFxuICBoZWlnaHQ6IG51bWJlclxuICBtaW5XaWR0aFVuaXQ6IFlHVW5pdFxuICBtaW5XaWR0aDogbnVtYmVyXG4gIG1pbkhlaWdodFVuaXQ6IFlHVW5pdFxuICBtaW5IZWlnaHQ6IG51bWJlclxuICBtYXhXaWR0aFVuaXQ6IFlHVW5pdFxuICBtYXhXaWR0aDogbnVtYmVyXG4gIG1heEhlaWdodFVuaXQ6IFlHVW5pdFxuICBtYXhIZWlnaHQ6IG51bWJlclxuICBwb3NpdGlvbkxlZnRVbml0OiBZR1VuaXRcbiAgcG9zaXRpb25MZWZ0OiBudW1iZXJcbiAgcG9zaXRpb25Ub3BVbml0OiBZR1VuaXRcbiAgcG9zaXRpb25Ub3A6IG51bWJlclxuICBwb3NpdGlvblJpZ2h0VW5pdDogWUdVbml0XG4gIHBvc2l0aW9uUmlnaHQ6IG51bWJlclxuICBwb3NpdGlvbkJvdHRvbVVuaXQ6IFlHVW5pdFxuICBwb3NpdGlvbkJvdHRvbTogbnVtYmVyXG4gIC8qKiBtYXJnaW4gKi9cbiAgbWFyZ2luTGVmdFVuaXQ6IFlHVW5pdFxuICBtYXJnaW5MZWZ0OiBudW1iZXJcbiAgbWFyZ2luVG9wVW5pdDogWUdVbml0XG4gIG1hcmdpblRvcDogbnVtYmVyXG4gIG1hcmdpblJpZ2h0VW5pdDogWUdVbml0XG4gIG1hcmdpblJpZ2h0OiBudW1iZXJcbiAgbWFyZ2luQm90dG9tVW5pdDogWUdVbml0XG4gIG1hcmdpbkJvdHRvbTogbnVtYmVyXG4gIHBhZGRpbmdMZWZ0VW5pdDogWUdVbml0XG4gIHBhZGRpbmdMZWZ0OiBudW1iZXJcbiAgcGFkZGluZ1RvcFVuaXQ6IFlHVW5pdFxuICBwYWRkaW5nVG9wOiBudW1iZXJcbiAgcGFkZGluZ1JpZ2h0VW5pdDogWUdVbml0XG4gIHBhZGRpbmdSaWdodDogbnVtYmVyXG4gIHBhZGRpbmdCb3R0b21Vbml0OiBZR1VuaXRcbiAgcGFkZGluZ0JvdHRvbTogbnVtYmVyXG4gIGJvcmRlckxlZnQ6IG51bWJlclxuICBib3JkZXJUb3A6IG51bWJlclxuICBib3JkZXJSaWdodDogbnVtYmVyXG4gIGJvcmRlckJvdHRvbTogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlVpVHJhbnNmb3JtKCk6IFBCVWlUcmFuc2Zvcm0ge1xuICByZXR1cm4ge1xuICAgIHBhcmVudDogMCxcbiAgICByaWdodE9mOiAwLFxuICAgIHBvc2l0aW9uVHlwZTogMCxcbiAgICBhbGlnbkNvbnRlbnQ6IDAsXG4gICAgYWxpZ25JdGVtczogMCxcbiAgICBhbGlnblNlbGY6IDAsXG4gICAgZmxleERpcmVjdGlvbjogMCxcbiAgICBmbGV4V3JhcDogMCxcbiAgICBqdXN0aWZ5Q29udGVudDogMCxcbiAgICBvdmVyZmxvdzogMCxcbiAgICBkaXNwbGF5OiAwLFxuICAgIGRpcmVjdGlvbjogMCxcbiAgICBmbGV4OiAwLFxuICAgIGZsZXhCYXNpc1VuaXQ6IDAsXG4gICAgZmxleEJhc2lzOiAwLFxuICAgIGZsZXhHcm93OiAwLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgd2lkdGhVbml0OiAwLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodFVuaXQ6IDAsXG4gICAgaGVpZ2h0OiAwLFxuICAgIG1pbldpZHRoVW5pdDogMCxcbiAgICBtaW5XaWR0aDogMCxcbiAgICBtaW5IZWlnaHRVbml0OiAwLFxuICAgIG1pbkhlaWdodDogMCxcbiAgICBtYXhXaWR0aFVuaXQ6IDAsXG4gICAgbWF4V2lkdGg6IDAsXG4gICAgbWF4SGVpZ2h0VW5pdDogMCxcbiAgICBtYXhIZWlnaHQ6IDAsXG4gICAgcG9zaXRpb25MZWZ0VW5pdDogMCxcbiAgICBwb3NpdGlvbkxlZnQ6IDAsXG4gICAgcG9zaXRpb25Ub3BVbml0OiAwLFxuICAgIHBvc2l0aW9uVG9wOiAwLFxuICAgIHBvc2l0aW9uUmlnaHRVbml0OiAwLFxuICAgIHBvc2l0aW9uUmlnaHQ6IDAsXG4gICAgcG9zaXRpb25Cb3R0b21Vbml0OiAwLFxuICAgIHBvc2l0aW9uQm90dG9tOiAwLFxuICAgIG1hcmdpbkxlZnRVbml0OiAwLFxuICAgIG1hcmdpbkxlZnQ6IDAsXG4gICAgbWFyZ2luVG9wVW5pdDogMCxcbiAgICBtYXJnaW5Ub3A6IDAsXG4gICAgbWFyZ2luUmlnaHRVbml0OiAwLFxuICAgIG1hcmdpblJpZ2h0OiAwLFxuICAgIG1hcmdpbkJvdHRvbVVuaXQ6IDAsXG4gICAgbWFyZ2luQm90dG9tOiAwLFxuICAgIHBhZGRpbmdMZWZ0VW5pdDogMCxcbiAgICBwYWRkaW5nTGVmdDogMCxcbiAgICBwYWRkaW5nVG9wVW5pdDogMCxcbiAgICBwYWRkaW5nVG9wOiAwLFxuICAgIHBhZGRpbmdSaWdodFVuaXQ6IDAsXG4gICAgcGFkZGluZ1JpZ2h0OiAwLFxuICAgIHBhZGRpbmdCb3R0b21Vbml0OiAwLFxuICAgIHBhZGRpbmdCb3R0b206IDAsXG4gICAgYm9yZGVyTGVmdDogMCxcbiAgICBib3JkZXJUb3A6IDAsXG4gICAgYm9yZGVyUmlnaHQ6IDAsXG4gICAgYm9yZGVyQm90dG9tOiAwXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJVaVRyYW5zZm9ybSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVWlUcmFuc2Zvcm0sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wYXJlbnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjMyKS5pbnQzMihtZXNzYWdlLnBhcmVudClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmlnaHRPZiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NDApLmludDMyKG1lc3NhZ2UucmlnaHRPZilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25UeXBlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UucG9zaXRpb25UeXBlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGlnbkNvbnRlbnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYWxpZ25Db250ZW50KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGlnbkl0ZW1zICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5pbnQzMihtZXNzYWdlLmFsaWduSXRlbXMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFsaWduU2VsZiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzMikuaW50MzIobWVzc2FnZS5hbGlnblNlbGYpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhEaXJlY3Rpb24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDApLmludDMyKG1lc3NhZ2UuZmxleERpcmVjdGlvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZmxleFdyYXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmludDMyKG1lc3NhZ2UuZmxleFdyYXApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmp1c3RpZnlDb250ZW50ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5pbnQzMihtZXNzYWdlLmp1c3RpZnlDb250ZW50KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdmVyZmxvdyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NCkuaW50MzIobWVzc2FnZS5vdmVyZmxvdylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzcGxheSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS5kaXNwbGF5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoODApLmludDMyKG1lc3NhZ2UuZGlyZWN0aW9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDkzKS5mbG9hdChtZXNzYWdlLmZsZXgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhCYXNpc1VuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTA0KS5pbnQzMihtZXNzYWdlLmZsZXhCYXNpc1VuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhCYXNpcyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2UuZmxleEJhc2lzKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5mbGV4R3JvdyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjUpLmZsb2F0KG1lc3NhZ2UuZmxleEdyb3cpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZsZXhTaHJpbmsgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMzKS5mbG9hdChtZXNzYWdlLmZsZXhTaHJpbmspXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLndpZHRoVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzYpLmludDMyKG1lc3NhZ2Uud2lkdGhVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53aWR0aCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNDkpLmZsb2F0KG1lc3NhZ2Uud2lkdGgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhlaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTUyKS5pbnQzMihtZXNzYWdlLmhlaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmhlaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNjUpLmZsb2F0KG1lc3NhZ2UuaGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5taW5XaWR0aFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTY4KS5pbnQzMihtZXNzYWdlLm1pbldpZHRoVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWluV2lkdGggIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgxKS5mbG9hdChtZXNzYWdlLm1pbldpZHRoKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5taW5IZWlnaHRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE4NCkuaW50MzIobWVzc2FnZS5taW5IZWlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5taW5IZWlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTk3KS5mbG9hdChtZXNzYWdlLm1pbkhlaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4V2lkdGhVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0OCkuaW50MzIobWVzc2FnZS5tYXhXaWR0aFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1heFdpZHRoICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI2MSkuZmxvYXQobWVzc2FnZS5tYXhXaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4SGVpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNjQpLmludDMyKG1lc3NhZ2UubWF4SGVpZ2h0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4SGVpZ2h0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI3NykuZmxvYXQobWVzc2FnZS5tYXhIZWlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uTGVmdFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzI4KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uTGVmdFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uTGVmdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNDEpLmZsb2F0KG1lc3NhZ2UucG9zaXRpb25MZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvblRvcFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzQ0KS5pbnQzMihtZXNzYWdlLnBvc2l0aW9uVG9wVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9zaXRpb25Ub3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzU3KS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvblJpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNjApLmludDMyKG1lc3NhZ2UucG9zaXRpb25SaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uUmlnaHQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzczKS5mbG9hdChtZXNzYWdlLnBvc2l0aW9uUmlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvc2l0aW9uQm90dG9tVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNzYpLmludDMyKG1lc3NhZ2UucG9zaXRpb25Cb3R0b21Vbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wb3NpdGlvbkJvdHRvbSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzODkpLmZsb2F0KG1lc3NhZ2UucG9zaXRpb25Cb3R0b20pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkxlZnRVbml0ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQwOCkuaW50MzIobWVzc2FnZS5tYXJnaW5MZWZ0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luTGVmdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MjEpLmZsb2F0KG1lc3NhZ2UubWFyZ2luTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luVG9wVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0MjQpLmludDMyKG1lc3NhZ2UubWFyZ2luVG9wVW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWFyZ2luVG9wICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQzNykuZmxvYXQobWVzc2FnZS5tYXJnaW5Ub3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpblJpZ2h0VW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NDApLmludDMyKG1lc3NhZ2UubWFyZ2luUmlnaHRVbml0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tYXJnaW5SaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NTMpLmZsb2F0KG1lc3NhZ2UubWFyZ2luUmlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkJvdHRvbVVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDU2KS5pbnQzMihtZXNzYWdlLm1hcmdpbkJvdHRvbVVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1hcmdpbkJvdHRvbSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0NjkpLmZsb2F0KG1lc3NhZ2UubWFyZ2luQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDg4KS5pbnQzMihtZXNzYWdlLnBhZGRpbmdMZWZ0VW5pdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0xlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTAxKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdMZWZ0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MDQpLmludDMyKG1lc3NhZ2UucGFkZGluZ1RvcFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdUb3AgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTE3KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdUb3ApXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdSaWdodFVuaXQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTIwKS5pbnQzMihtZXNzYWdlLnBhZGRpbmdSaWdodFVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdSaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MzMpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1JpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nQm90dG9tVW5pdCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1MzYpLmludDMyKG1lc3NhZ2UucGFkZGluZ0JvdHRvbVVuaXQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBhZGRpbmdCb3R0b20gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTQ5KS5mbG9hdChtZXNzYWdlLnBhZGRpbmdCb3R0b20pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJvcmRlckxlZnQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgxKS5mbG9hdChtZXNzYWdlLmJvcmRlckxlZnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJvcmRlclRvcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OTcpLmZsb2F0KG1lc3NhZ2UuYm9yZGVyVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ib3JkZXJSaWdodCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2MTMpLmZsb2F0KG1lc3NhZ2UuYm9yZGVyUmlnaHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJvcmRlckJvdHRvbSAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2MjkpLmZsb2F0KG1lc3NhZ2UuYm9yZGVyQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJVaVRyYW5zZm9ybSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJVaVRyYW5zZm9ybSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICBtZXNzYWdlLnBhcmVudCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4MDpcbiAgICAgICAgICBtZXNzYWdlLnJpZ2h0T2YgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uVHlwZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduQ29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmFsaWduSXRlbXMgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbGlnblNlbGYgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4RGlyZWN0aW9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleFdyYXAgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5qdXN0aWZ5Q29udGVudCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBtZXNzYWdlLm92ZXJmbG93ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzcGxheSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5kaXJlY3Rpb24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UuZmxleCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBtZXNzYWdlLmZsZXhCYXNpc1VuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEJhc2lzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UuZmxleEdyb3cgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5mbGV4U2hyaW5rID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgIG1lc3NhZ2Uud2lkdGhVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBtZXNzYWdlLndpZHRoID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIG1lc3NhZ2UuaGVpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgbWVzc2FnZS5oZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgbWVzc2FnZS5taW5XaWR0aFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIG1lc3NhZ2UubWluV2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgbWVzc2FnZS5taW5IZWlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICBtZXNzYWdlLm1pbkhlaWdodCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBtZXNzYWdlLm1heFdpZHRoVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgbWVzc2FnZS5tYXhXaWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICBtZXNzYWdlLm1heEhlaWdodFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgIG1lc3NhZ2UubWF4SGVpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25MZWZ0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvbkxlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDM6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ0OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Ub3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgbWVzc2FnZS5wb3NpdGlvblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgIG1lc3NhZ2UucG9zaXRpb25Cb3R0b21Vbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0ODpcbiAgICAgICAgICBtZXNzYWdlLnBvc2l0aW9uQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDUyOlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1MzpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblRvcFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU0OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU1OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luUmlnaHRVbml0ID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1NjpcbiAgICAgICAgICBtZXNzYWdlLm1hcmdpblJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU3OlxuICAgICAgICAgIG1lc3NhZ2UubWFyZ2luQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTg6XG4gICAgICAgICAgbWVzc2FnZS5tYXJnaW5Cb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nTGVmdFVuaXQgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDYyOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0xlZnQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjM6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0VW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjY6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nUmlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjc6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tVW5pdCA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjg6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDcyOlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyTGVmdCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NDpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclRvcCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3NjpcbiAgICAgICAgICBtZXNzYWdlLmJvcmRlclJpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgIG1lc3NhZ2UuYm9yZGVyQm90dG9tID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJVaVRyYW5zZm9ybSB9IGZyb20gJy4vcGIvVWlUcmFuc2Zvcm0uZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA1MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVWlUcmFuc2Zvcm1TY2hlbWE6IElTY2hlbWE8UEJVaVRyYW5zZm9ybT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJVaVRyYW5zZm9ybSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVWlUcmFuc2Zvcm0uZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVWlUcmFuc2Zvcm0ge1xuICAgIHJldHVybiBQQlVpVHJhbnNmb3JtLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJVaVRyYW5zZm9ybSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVWlUcmFuc2Zvcm0uZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlZpc2liaWxpdHlDb21wb25lbnQoKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgcmV0dXJuIHsgdmlzaWJsZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJWaXNpYmlsaXR5Q29tcG9uZW50ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJWaXNpYmlsaXR5Q29tcG9uZW50LCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJWaXNpYmlsaXR5Q29tcG9uZW50IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlZpc2liaWxpdHlDb21wb25lbnQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4vcGIvVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDgxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hOiBJU2NoZW1hPFBCVmlzaWJpbGl0eUNvbXBvbmVudD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJWaXNpYmlsaXR5Q29tcG9uZW50LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJWaXNpYmlsaXR5Q29tcG9uZW50LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIHJldHVybiBQQlZpc2liaWxpdHlDb21wb25lbnQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlZpc2liaWxpdHlDb21wb25lbnQuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZS90eXBlcydcbmltcG9ydCAqIGFzIFRyYW5zZm9ybVNjaGVtYSBmcm9tICcuLi9sZWdhY3kvVHJhbnNmb3JtJ1xuaW1wb3J0ICogYXMgQW5pbWF0b3JTY2hlbWEgZnJvbSAnLi9BbmltYXRvci5nZW4nXG5pbXBvcnQgKiBhcyBBdWRpb1NvdXJjZVNjaGVtYSBmcm9tICcuL0F1ZGlvU291cmNlLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhckF0dGFjaFNjaGVtYSBmcm9tICcuL0F2YXRhckF0dGFjaC5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEgZnJvbSAnLi9BdmF0YXJNb2RpZmllckFyZWEuZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyU2hhcGVTY2hlbWEgZnJvbSAnLi9BdmF0YXJTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBCaWxsYm9hcmRTY2hlbWEgZnJvbSAnLi9CaWxsYm9hcmQuZ2VuJ1xuaW1wb3J0ICogYXMgQm94U2hhcGVTY2hlbWEgZnJvbSAnLi9Cb3hTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBDYW1lcmFNb2RlU2NoZW1hIGZyb20gJy4vQ2FtZXJhTW9kZS5nZW4nXG5pbXBvcnQgKiBhcyBDYW1lcmFNb2RlQXJlYVNjaGVtYSBmcm9tICcuL0NhbWVyYU1vZGVBcmVhLmdlbidcbmltcG9ydCAqIGFzIEN5bGluZGVyU2hhcGVTY2hlbWEgZnJvbSAnLi9DeWxpbmRlclNoYXBlLmdlbidcbmltcG9ydCAqIGFzIEdMVEZTaGFwZVNjaGVtYSBmcm9tICcuL0dMVEZTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBNYXRlcmlhbFNjaGVtYSBmcm9tICcuL01hdGVyaWFsLmdlbidcbmltcG9ydCAqIGFzIE1lc2hDb2xsaWRlclNjaGVtYSBmcm9tICcuL01lc2hDb2xsaWRlci5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoUmVuZGVyZXJTY2hlbWEgZnJvbSAnLi9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0ICogYXMgTkZUU2hhcGVTY2hlbWEgZnJvbSAnLi9ORlRTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBPblBvaW50ZXJEb3duU2NoZW1hIGZyb20gJy4vT25Qb2ludGVyRG93bi5nZW4nXG5pbXBvcnQgKiBhcyBPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hIGZyb20gJy4vT25Qb2ludGVyRG93blJlc3VsdC5nZW4nXG5pbXBvcnQgKiBhcyBPblBvaW50ZXJVcFNjaGVtYSBmcm9tICcuL09uUG9pbnRlclVwLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hIGZyb20gJy4vT25Qb2ludGVyVXBSZXN1bHQuZ2VuJ1xuaW1wb3J0ICogYXMgUGxhbmVTaGFwZVNjaGVtYSBmcm9tICcuL1BsYW5lU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgUG9pbnRlckV2ZW50c1NjaGVtYSBmcm9tICcuL1BvaW50ZXJFdmVudHMuZ2VuJ1xuaW1wb3J0ICogYXMgUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYSBmcm9tICcuL1BvaW50ZXJFdmVudHNSZXN1bHQuZ2VuJ1xuaW1wb3J0ICogYXMgUG9pbnRlckxvY2tTY2hlbWEgZnJvbSAnLi9Qb2ludGVyTG9jay5nZW4nXG5pbXBvcnQgKiBhcyBSYXljYXN0U2NoZW1hIGZyb20gJy4vUmF5Y2FzdC5nZW4nXG5pbXBvcnQgKiBhcyBSYXljYXN0UmVzdWx0U2NoZW1hIGZyb20gJy4vUmF5Y2FzdFJlc3VsdC5nZW4nXG5pbXBvcnQgKiBhcyBTcGhlcmVTaGFwZVNjaGVtYSBmcm9tICcuL1NwaGVyZVNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFRleHRTaGFwZVNjaGVtYSBmcm9tICcuL1RleHRTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBVaVRleHRTY2hlbWEgZnJvbSAnLi9VaVRleHQuZ2VuJ1xuaW1wb3J0ICogYXMgVWlUcmFuc2Zvcm1TY2hlbWEgZnJvbSAnLi9VaVRyYW5zZm9ybS5nZW4nXG5pbXBvcnQgKiBhcyBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIGZyb20gJy4vVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyh7XG4gIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWFcbn06IFBpY2s8SUVuZ2luZSwgJ2RlZmluZUNvbXBvbmVudEZyb21TY2hlbWEnPikge1xuICByZXR1cm4ge1xuXHRcdEFuaW1hdG9yOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEFuaW1hdG9yU2NoZW1hLkFuaW1hdG9yU2NoZW1hLCBBbmltYXRvclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF1ZGlvU291cmNlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hLCBBdWRpb1NvdXJjZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhckF0dGFjaDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJBdHRhY2hTY2hlbWEuQXZhdGFyQXR0YWNoU2NoZW1hLCBBdmF0YXJBdHRhY2hTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJNb2RpZmllckFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSwgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyU2hhcGVTY2hlbWEuQXZhdGFyU2hhcGVTY2hlbWEsIEF2YXRhclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QmlsbGJvYXJkOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJpbGxib2FyZFNjaGVtYS5CaWxsYm9hcmRTY2hlbWEsIEJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEJveFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJveFNoYXBlU2NoZW1hLkJveFNoYXBlU2NoZW1hLCBCb3hTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdENhbWVyYU1vZGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZVNjaGVtYS5DYW1lcmFNb2RlU2NoZW1hLCBDYW1lcmFNb2RlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q2FtZXJhTW9kZUFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEsIENhbWVyYU1vZGVBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q3lsaW5kZXJTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEsIEN5bGluZGVyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRHTFRGU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoR0xURlNoYXBlU2NoZW1hLkdMVEZTaGFwZVNjaGVtYSwgR0xURlNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWF0ZXJpYWw6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEsIE1hdGVyaWFsU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWVzaENvbGxpZGVyOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1lc2hDb2xsaWRlclNjaGVtYS5NZXNoQ29sbGlkZXJTY2hlbWEsIE1lc2hDb2xsaWRlclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE1lc2hSZW5kZXJlcjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRORlRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShORlRTaGFwZVNjaGVtYS5ORlRTaGFwZVNjaGVtYSwgTkZUU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJEb3duOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlckRvd25TY2hlbWEuT25Qb2ludGVyRG93blNjaGVtYSwgT25Qb2ludGVyRG93blNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlckRvd25SZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5PblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLCBPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXA6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEsIE9uUG9pbnRlclVwU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXBSZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEsIE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UGxhbmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQbGFuZVNoYXBlU2NoZW1hLlBsYW5lU2hhcGVTY2hlbWEsIFBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQb2ludGVyRXZlbnRzOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFBvaW50ZXJFdmVudHNTY2hlbWEuUG9pbnRlckV2ZW50c1NjaGVtYSwgUG9pbnRlckV2ZW50c1NjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFBvaW50ZXJFdmVudHNSZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoUG9pbnRlckV2ZW50c1Jlc3VsdFNjaGVtYS5Qb2ludGVyRXZlbnRzUmVzdWx0U2NoZW1hLCBQb2ludGVyRXZlbnRzUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UG9pbnRlckxvY2s6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoUG9pbnRlckxvY2tTY2hlbWEuUG9pbnRlckxvY2tTY2hlbWEsIFBvaW50ZXJMb2NrU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UmF5Y2FzdDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShSYXljYXN0U2NoZW1hLlJheWNhc3RTY2hlbWEsIFJheWNhc3RTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRSYXljYXN0UmVzdWx0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFJheWNhc3RSZXN1bHRTY2hlbWEuUmF5Y2FzdFJlc3VsdFNjaGVtYSwgUmF5Y2FzdFJlc3VsdFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFNwaGVyZVNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFNwaGVyZVNoYXBlU2NoZW1hLlNwaGVyZVNoYXBlU2NoZW1hLCBTcGhlcmVTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFRleHRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShUZXh0U2hhcGVTY2hlbWEuVGV4dFNoYXBlU2NoZW1hLCBUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRVaVRleHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSwgVWlUZXh0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VWlUcmFuc2Zvcm06IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVWlUcmFuc2Zvcm1TY2hlbWEuVWlUcmFuc2Zvcm1TY2hlbWEsIFVpVHJhbnNmb3JtU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VmlzaWJpbGl0eUNvbXBvbmVudDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEsIFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEuQ09NUE9ORU5UX0lEKSxcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBDb21wb25lbnREZWZpbml0aW9uLCBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhbnNmb3JtVHlwZSA9IHtcbiAgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlciB9XG4gIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IHc6IG51bWJlciB9XG4gIHNjYWxlOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICBwYXJlbnQ/OiBFbnRpdHlcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRSQU5TRk9STV9MRU5HVEggPSA0NFxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtU2NoZW1hOiBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFRyYW5zZm9ybVR5cGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdHIgPSBidWlsZGVyLmluY3JlbWVudFdyaXRlT2Zmc2V0KFRSQU5TRk9STV9MRU5HVEgpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciwgdmFsdWUucG9zaXRpb24ueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgNCwgdmFsdWUucG9zaXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgOCwgdmFsdWUucG9zaXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMTIsIHZhbHVlLnJvdGF0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDE2LCB2YWx1ZS5yb3RhdGlvbi55KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyMCwgdmFsdWUucm90YXRpb24ueilcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjQsIHZhbHVlLnJvdGF0aW9uLncpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI4LCB2YWx1ZS5zY2FsZS54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAzMiwgdmFsdWUuc2NhbGUueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzYsIHZhbHVlLnNjYWxlLnopXG4gICAgYnVpbGRlci5zZXRVaW50MzIocHRyICsgNDAsIHZhbHVlLnBhcmVudCB8fCAwKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICBjb25zdCBwdHIgPSByZWFkZXIuaW5jcmVtZW50UmVhZE9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyA0KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgOClcbiAgICAgIH0sXG4gICAgICByb3RhdGlvbjoge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxMiksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDE2KSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjApLFxuICAgICAgICB3OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyNClcbiAgICAgIH0sXG4gICAgICBzY2FsZToge1xuICAgICAgICB4OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAyOCksXG4gICAgICAgIHk6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDMyKSxcbiAgICAgICAgejogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMzYpXG4gICAgICB9LFxuICAgICAgcGFyZW50OiByZWFkZXIuZ2V0VWludDMyKHB0ciArIDQwKSBhcyBFbnRpdHlcbiAgICB9XG4gIH0sXG4gIGNyZWF0ZSgpOiBUcmFuc2Zvcm1UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHsgeDogMCwgeTogMCwgejogMCB9LFxuICAgICAgc2NhbGU6IHsgeDogMSwgeTogMSwgejogMSB9LFxuICAgICAgcm90YXRpb246IHsgeDogMCwgeTogMCwgejogMCwgdzogMSB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVUcmFuc2Zvcm1Db21wb25lbnQoe1xuICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hXG59OiBQaWNrPElFbmdpbmUsICdkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hJz4pOiBDb21wb25lbnREZWZpbml0aW9uPFxuICBJU2NoZW1hPFRyYW5zZm9ybVR5cGU+LFxuICBQYXJ0aWFsPFRyYW5zZm9ybVR5cGU+XG4+IHtcbiAgcmV0dXJuIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVHJhbnNmb3JtU2NoZW1hLCBDT01QT05FTlRfSUQpXG59XG4iLCJpbXBvcnQgeyBQcmVFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuXG5pbXBvcnQgeyBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyB9IGZyb20gJy4vZ2VuZXJhdGVkL2luZGV4LmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgUEJNZXNoUmVuZGVyZXIgfSBmcm9tICcuL2dlbmVyYXRlZC9wYi9NZXNoUmVuZGVyZXIuZ2VuJ1xuaW1wb3J0IHsgZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9sZWdhY3kvVHJhbnNmb3JtJ1xuXG5leHBvcnQgZW51bSBDT01QT05FTlRfSUQge1xuICBTWU5DID0gMTAwMFxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU2RrQ29tcG9uZW50cyA9IFJldHVyblR5cGU8dHlwZW9mIGRlZmluZVNka0NvbXBvbmVudHM+XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTZGtDb21wb25lbnRzKGVuZ2luZTogUHJlRW5naW5lKSB7XG4gIGNvbnN0IGF1dG9nZW5lcmF0ZWRDb21wb25lbnRzID0gZGVmaW5lTGlicmFyeUNvbXBvbmVudHMoZW5naW5lKVxuICBlbmdpbmUucmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cy5NZXNoUmVuZGVyZXIuX2lkKVxuICByZXR1cm4ge1xuICAgIC4uLmF1dG9nZW5lcmF0ZWRDb21wb25lbnRzLFxuICAgIFRyYW5zZm9ybTogZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KGVuZ2luZSksXG4gICAgTWVzaFJlbmRlcmVyOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICAgIElTY2hlbWE8UEJNZXNoUmVuZGVyZXI+LFxuICAgICAgUGFydGlhbDxQQk1lc2hSZW5kZXJlcj5cbiAgICA+KE1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEsIE1lc2hSZW5kZXJlclNjaGVtYS5DT01QT05FTlRfSUQpXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElBcnJheTxUPih0eXBlOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxBcnJheTxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogQXJyYXk8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGJ1aWxkZXIud3JpdGVVaW50MzIodmFsdWUubGVuZ3RoKVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHR5cGUuc2VyaWFsaXplKGl0ZW0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBBcnJheTxUPiB7XG4gICAgICBjb25zdCBuZXdBcnJheTogQXJyYXk8VD4gPSBbXVxuICAgICAgY29uc3QgbGVuZ3RoID0gcmVhZGVyLnJlYWRVaW50MzIoKVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBuZXdBcnJheS5wdXNoKHR5cGUuZGVzZXJpYWxpemUocmVhZGVyKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdBcnJheVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgQm9vbDogSVNjaGVtYTxib29sZWFuPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBib29sZWFuLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUgPyAxIDogMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpID09PSAxXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElFbnVtPFQ+KHR5cGU6IElTY2hlbWE8YW55Pik6IElTY2hlbWE8VD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgdHlwZS5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBUIHtcbiAgICAgIHJldHVybiB0eXBlLmRlc2VyaWFsaXplKHJlYWRlcilcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiB0eXBlLmNyZWF0ZSgpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDMyKHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxvYXQ2NDogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVGbG9hdDY0KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEZsb2F0NjQoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDAuMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50NjQoQmlnSW50KHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKHJlYWRlci5yZWFkSW50NjQoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQzMjogSVNjaGVtYTxudW1iZXI+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IG51bWJlciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQzMigpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MTY6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MTYodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MTYoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDg6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50OCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRJbnQ4KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBGbGF0U3RyaW5nOiBJU2NoZW1hPHN0cmluZz4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogc3RyaW5nLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocmVhZGVyLnJlYWRCdWZmZXIoKSlcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRWNzU3RyaW5nID0gRmxhdFN0cmluZ1xuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBUb09wdGlvbmFsIH0gZnJvbSAnLi90eXBpbmcnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWMge1xuICBba2V5OiBzdHJpbmddOiBJU2NoZW1hXG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VCBleHRlbmRzIFNwZWM+ID0gVG9PcHRpb25hbDx7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgSVNjaGVtYVxuICAgID8gUmV0dXJuVHlwZTxUW0tdWydkZXNlcmlhbGl6ZSddPlxuICAgIDogVFtLXSBleHRlbmRzIFNwZWNcbiAgICA/IFJlc3VsdDxUW0tdPlxuICAgIDogbmV2ZXJcbn0+XG5cbmV4cG9ydCB0eXBlIE1hcFNjaGVtYVR5cGU8VCBleHRlbmRzIFNwZWM+ID0gSVNjaGVtYTxSZXN1bHQ8VD4+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gSU1hcDxUIGV4dGVuZHMgU3BlYz4oc3BlYzogVCk6IElTY2hlbWE8UmVzdWx0PFQ+PiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBSZXN1bHQ8VD4sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIHNwZWNba2V5XS5zZXJpYWxpemUoKHZhbHVlIGFzIGFueSlba2V5XSwgYnVpbGRlcilcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFJlc3VsdDxUPiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBSZXN1bHQ8VD4gPSB7fSBhcyBhbnlcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWMpIHtcbiAgICAgICAgLy8gVE9ETzogYXMgYW55XG4gICAgICAgIDsobmV3VmFsdWUgYXMgYW55KVtrZXldID0gc3BlY1trZXldLmNyZWF0ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3VmFsdWVcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElPcHRpb25hbDxUPihzcGVjOiBJU2NoZW1hPFQ+KTogSVNjaGVtYTxUIHwgdW5kZWZpbmVkPiB7XG4gIHJldHVybiB7XG4gICAgc2VyaWFsaXplKHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMSlcbiAgICAgICAgc3BlYy5zZXJpYWxpemUodmFsdWUsIGJ1aWxkZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWlsZGVyLndyaXRlSW50OCgwKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgICBjb25zdCBleGlzdHMgPSByZWFkZXIucmVhZEludDgoKVxuICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICByZXR1cm4gc3BlYy5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJQXJyYXkgfSBmcm9tICcuL0FycmF5J1xuaW1wb3J0IHsgQm9vbCB9IGZyb20gJy4vYmFzaWMvQm9vbGVhbidcbmltcG9ydCB7IElFbnVtIH0gZnJvbSAnLi9iYXNpYy9FbnVtJ1xuaW1wb3J0IHsgRmxvYXQzMiwgRmxvYXQ2NCB9IGZyb20gJy4vYmFzaWMvRmxvYXQnXG5pbXBvcnQgeyBJbnQxNiwgSW50MzIsIEludDgsIEludDY0IGFzIGlJbnQ2NCB9IGZyb20gJy4vYmFzaWMvSW50ZWdlcidcbmltcG9ydCB7IEVjc1N0cmluZyB9IGZyb20gJy4vYmFzaWMvU3RyaW5nJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcbmltcG9ydCB7IElNYXAgfSBmcm9tICcuL01hcCdcbmltcG9ydCB7IElPcHRpb25hbCB9IGZyb20gJy4vT3B0aW9uYWwnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgbmFtZXNwYWNlIFNjaGVtYXMge1xuICBleHBvcnQgdHlwZSBTY2hlbWFUeXBlID0gSVNjaGVtYVxuXG4gIGV4cG9ydCBjb25zdCBCb29sZWFuID0gQm9vbFxuXG4gIGV4cG9ydCBjb25zdCBTdHJpbmcgPSBFY3NTdHJpbmdcblxuICBleHBvcnQgY29uc3QgRmxvYXQgPSBGbG9hdDMyXG4gIGV4cG9ydCBjb25zdCBEb3VibGUgPSBGbG9hdDY0XG5cbiAgZXhwb3J0IGNvbnN0IEJ5dGUgPSBJbnQ4XG4gIGV4cG9ydCBjb25zdCBTaG9ydCA9IEludDE2XG4gIGV4cG9ydCBjb25zdCBJbnQgPSBJbnQzMlxuICBleHBvcnQgY29uc3QgSW50NjQgPSBpSW50NjRcblxuICBleHBvcnQgY29uc3QgTnVtYmVyID0gRmxvYXQzMlxuXG4gIGV4cG9ydCBjb25zdCBFbnVtID0gSUVudW1cbiAgZXhwb3J0IGNvbnN0IEFycmF5ID0gSUFycmF5XG4gIGV4cG9ydCBjb25zdCBNYXAgPSBJTWFwXG4gIGV4cG9ydCBjb25zdCBPcHRpb25hbCA9IElPcHRpb25hbFxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk5emNtTXZkSGx3WlhNdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dVM1J5ZFdOMElHOW1JSFJvWlNCdFpYTnpZV2RsSUhSb1lYUW5jeUJpWldsdVp5QjBjbUZ1YzJabGNtVmtJR0psZEhkbFpXNGdZMnhwWlc1MGN5NWNiaUFxSUVCd2RXSnNhV05jYmlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVFdWemMyRm5aVHhVSUQwZ2RXNXJibTkzYmo0Z1BTQjdYRzRnSUd0bGVURTZJRzUxYldKbGNseHVJQ0JyWlhreU9pQnVkVzFpWlhKY2JpQWdkR2x0WlhOMFlXMXdPaUJ1ZFcxaVpYSmNiaUFnWkdGMFlUb2dWQ0I4SUc1MWJHeGNibjFjYmx4dUx5b3FYRzRnS2lCUVlYbHNiMkZrSUhSb1lYUWdhWFJ6SUdKbGFXNW5JSE4wYjNKbFpDQnBiaUIwYUdVZ2MzUmhkR1V1WEc0Z0tpQkFjSFZpYkdsalhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElGQmhlV3h2WVdROFZDQTlJSFZ1YTI1dmQyNCtJRDBnZTF4dUlDQjBhVzFsYzNSaGJYQTZJRzUxYldKbGNseHVJQ0JrWVhSaE9pQlVJSHdnYm5Wc2JGeHVmVnh1WEc0dktpcGNiaUFxSUV4dlkyRnNJSE4wWVhSbFhHNGdLaUJBY0hWaWJHbGpYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRk4wWVhSbFBGUWdQU0IxYm10dWIzZHVQaUE5SUUxaGNEeHVkVzFpWlhJc0lFMWhjRHh1ZFcxaVpYSXNJRkJoZVd4dllXUThWRDRnZkNCdWRXeHNQajVjYmx4dUx5b3FYRzRnS2lCRFVrUlVJSEpsZEhWeWJpQjBlWEJsWEc0Z0tpQkFjSFZpYkdsalhHNGdLaTljYm1WNGNHOXlkQ0IwZVhCbElFTlNSRlE4VkNBOUlIVnVhMjV2ZDI0K0lEMGdlMXh1SUNCamNtVmhkR1ZGZG1WdWRDaHJaWGt4T2lCdWRXMWlaWElzSUd0bGVUSTZJRzUxYldKbGNpd2daR0YwWVRvZ1ZDQjhJRzUxYkd3cE9pQk5aWE56WVdkbFBGUStYRzRnSUhCeWIyTmxjM05OWlhOellXZGxLRzFsYzNOaFoyVTZJRTFsYzNOaFoyVThWRDRwT2lCTlpYTnpZV2RsUEZRK1hHNGdJR2RsZEZOMFlYUmxLQ2s2SUZOMFlYUmxQRlErWEc1OVhHNGlYWDA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JkdFByb3RvY29sID0gZXhwb3J0cy5zdGF0ZUl0ZXJhdG9yID0gZXhwb3J0cy5zYW1lRGF0YSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG5jb25zdCBnbG9iYWxCdWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlcjtcbi8qKlxuICogQ29tcGFyZSByYXcgZGF0YS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzYW1lRGF0YShhLCBiKSB7XG4gICAgLy8gQXQgcmVmZXJlbmNlIGxldmVsXG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBiIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGdsb2JhbEJ1ZmZlcikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIGdsb2JhbEJ1ZmZlciAmJiBiIGluc3RhbmNlb2YgZ2xvYmFsQnVmZmVyKSB7XG4gICAgICAgICAgICAvLyBEZWVwIGxldmVsXG4gICAgICAgICAgICByZXR1cm4gYS5lcXVhbHMoYik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zYW1lRGF0YSA9IHNhbWVEYXRhO1xuLyoqXG4gKiBTdGF0ZSBpdGVyYXRvclxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uKiBzdGF0ZUl0ZXJhdG9yKHN0YXRlKSB7XG4gICAgZm9yIChjb25zdCBba2V5MSwgdmFsdWUxXSBvZiBzdGF0ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiB2YWx1ZTEuZW50cmllcygpKSB7XG4gICAgICAgICAgICB5aWVsZCBba2V5MSwga2V5MiwgdmFsdWUyXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc3RhdGVJdGVyYXRvciA9IHN0YXRlSXRlcmF0b3I7XG4vKipcbiAqIEBwdWJsaWNcbiAqIENSRFQgcHJvdG9jb2wuXG4gKiBTdG9yZXMgdGhlIGxhdGVzdCBzdGF0ZSwgYW5kIGRlY2lkZXMgd2hlbmV2ZXIgd2UgaGF2ZVxuICogdG8gcHJvY2VzcyBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGluIGNhc2UgaXRzIGFuIHVwZGF0ZSwgb3JcbiAqIHRvIGRpc2NhcmQgYW5kIHNlbmQgb3VyIGxvY2FsIHZhbHVlIGNhdXNlIHJlbW90ZSBpdCdzIG91dGRhdGVkLlxuICovXG5mdW5jdGlvbiBjcmR0UHJvdG9jb2woKSB7XG4gICAgLyoqXG4gICAgICogTG9jYWwgc3RhdGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGxhdGVzdCBsYW1wb3J0IHRpbWVzdGFtcFxuICAgICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBXZSBzaG91bGQgY2FsbCB0aGlzIGZuIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCByZW1vdGVUaW1lc3RhbXApIHtcbiAgICAgICAgY29uc3Qga2V5MVZhbHVlID0gc3RhdGUuZ2V0KGtleTEpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLm1heChyZW1vdGVUaW1lc3RhbXAsIGtleTFWYWx1ZT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgIGlmIChrZXkxVmFsdWUpIHtcbiAgICAgICAgICAgIGtleTFWYWx1ZS5zZXQoa2V5MiwgeyB0aW1lc3RhbXAsIGRhdGEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdLZXkxVmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBuZXdLZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pO1xuICAgICAgICAgICAgc3RhdGUuc2V0KGtleTEsIG5ld0tleTFWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdGltZXN0YW1wLCBkYXRhIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBldmVudCBmb3IgdGhlIHNwZWNpZmllZCBrZXkgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBhbmRcbiAgICAgKiBsYW1wb3J0IHRpbWVzdG1hcCBpbmNyZW1lbnRlZCBieSBvbmUgaW4gdGhlIHN0YXRlLlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChrZXkxLCBrZXkyLCBkYXRhKSB7XG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IChzdGF0ZS5nZXQoa2V5MSk/LmdldChrZXkyKT8udGltZXN0YW1wIHx8IDApICsgMTtcbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKTtcbiAgICAgICAgcmV0dXJuIHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugb25seSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgcmVjaWV2ZWQgaXMgaGlnaGVyXG4gICAgICogdGhhbiB0aGUgc3RvcmVkIG9uZS4gSWYgaXRzIGxvd2VyLCB3ZSBzcHJlYWQgaXQgdG8gdGhlIG5ldHdvcmsgdG8gY29ycmVjdCB0aGUgcGVlci5cbiAgICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuICBcbiAgICAgKiBSZXR1cm5zIHRoZSByZWNpZXZlZCBkYXRhIGlmIHRoZSBsYW1wb3J0IG51bWJlciB3YXMgYmlnZ2VyIHRoYW4gb3Vycy5cbiAgICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5Mik7XG4gICAgICAgIC8vIFRoZSByZWNlaXZlZCBtZXNzYWdlIGlzID4gdGhhbiBvdXIgY3VycmVudCB2YWx1ZSwgdXBkYXRlIG91ciBzdGF0ZS5cbiAgICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudGltZXN0YW1wIDwgdGltZXN0YW1wKSB7XG4gICAgICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgICAgIGlmIChjdXJyZW50LnRpbWVzdGFtcCA+IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2FtZSBkYXRhLCBzYW1lIHRpbWVzdGFtcC4gV2VpcmRvIGVjaG8gbWVzc2FnZS5cbiAgICAgICAgaWYgKHNhbWVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRhKGN1cnJlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKS5kYXRhO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVFdmVudCxcbiAgICAgICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgICAgIGdldFN0YXRlXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JkdFByb3RvY29sID0gY3JkdFByb3RvY29sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOXpjbU12YVc1a1pYZ3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3p0QlFVTkJMREJEUVVGMVFqdEJRVVYyUWl4TlFVRk5MRmxCUVZrc1IwRkJTU3hWUVVGclFpeERRVUZETEUxQlFVMHNRMEZCUVR0QlFVVXZRenM3TzBkQlIwYzdRVUZEU0N4VFFVRm5RaXhSUVVGUkxFTkJRVWtzUTBGQlNTeEZRVUZGTEVOQlFVazdTVUZEY0VNc2NVSkJRWEZDTzBsQlEzSkNMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU03VVVGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUVR0SlFVVjRRaXhKUVVGSkxFTkJRVU1zV1VGQldTeFZRVUZWTEVsQlFVa3NRMEZCUXl4WlFVRlpMRlZCUVZVc1JVRkJSVHRSUVVOMFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4VlFVRlZMRXRCUVVzc1EwRkJReXhEUVVGRExGVkJRVlVzUlVGQlJUdFpRVU5xUXl4UFFVRlBMRXRCUVVzc1EwRkJRVHRUUVVOaU8xRkJSVVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja01zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTnFRaXhQUVVGUExFdEJRVXNzUTBGQlFUdGhRVU5pTzFOQlEwWTdVVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJRVHRMUVVOYU8wbEJSVVFzU1VGQlNTeFpRVUZaTEVWQlFVVTdVVUZEYUVJc1NVRkJTU3hEUVVGRExGbEJRVmtzV1VGQldTeEpRVUZKTEVOQlFVTXNXVUZCV1N4WlFVRlpMRVZCUVVVN1dVRkRNVVFzWVVGQllUdFpRVU5pTEU5QlFWRXNRMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlFUdFRRVU0xUWp0TFFVTkdPMGxCUlVRc1QwRkJUeXhMUVVGTExFTkJRVUU3UVVGRFpDeERRVUZETzBGQmVrSkVMRFJDUVhsQ1F6dEJRVVZFT3pzN1IwRkhSenRCUVVOSUxGRkJRV1VzUTBGQlF5eERRVUZETEdGQlFXRXNRMEZETlVJc1MwRkJaVHRKUVVWbUxFdEJRVXNzVFVGQlRTeERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVTdVVUZETlVNc1MwRkJTeXhOUVVGTkxFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJUdFpRVU0zUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUVR0VFFVTXpRanRMUVVOR08wRkJRMGdzUTBGQlF6dEJRVkpFTEhORFFWRkRPMEZCUlVRN096czdPenRIUVUxSE8wRkJRMGdzVTBGQlowSXNXVUZCV1R0SlFVY3hRanM3T3p0UFFVbEhPMGxCUTBnc1RVRkJUU3hMUVVGTExFZEJRV0VzU1VGQlNTeEhRVUZITEVWQlFVVXNRMEZCUVR0SlFVVnFRenM3TzA5QlIwYzdTVUZEU0N4VFFVRlRMRmRCUVZjc1EwRkRiRUlzU1VGQldTeEZRVU5hTEVsQlFWa3NSVUZEV2l4SlFVRmpMRVZCUTJRc1pVRkJkVUk3VVVGRmRrSXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUVR0UlFVTnFReXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVTjRRaXhsUVVGbExFVkJRMllzVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hUUVVGVExFbEJRVWtzUTBGQlF5eERRVU55UXl4RFFVRkJPMUZCUTBRc1NVRkJTU3hUUVVGVExFVkJRVVU3V1VGRFlpeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxGTkJRVk1zUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkJPMU5CUTNwRE8yRkJRVTA3V1VGRFRDeE5RVUZOTEZsQlFWa3NSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGQk8xbEJRemxDTEZsQlFWa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RFFVRkRMRU5CUVVFN1dVRkRNME1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVUU3VTBGRE9VSTdVVUZEUkN4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZCTzBsQlF6VkNMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBnc1UwRkJVeXhYUVVGWExFTkJRVU1zU1VGQldTeEZRVUZGTEVsQlFWa3NSVUZCUlN4SlFVRmpPMUZCUXpkRUxEQkNRVUV3UWp0UlFVTXhRaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRk5CUVZNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVRTdVVUZEYkVVc1YwRkJWeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGQk8xRkJSWGhETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTEVWQlFVVXNRMEZCUVR0SlFVTjRReXhEUVVGRE8wbEJSVVE3T3pzN096czdPMDlCVVVjN1NVRkRTQ3hUUVVGVExHTkJRV01zUTBGQlF5eFBRVUZ0UWp0UlFVTjZReXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZCTzFGQlF5OURMRTFCUVUwc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZCTzFGQlJURkRMSE5GUVVGelJUdFJRVU4wUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFRRVUZUTEVkQlFVY3NVMEZCVXl4RlFVRkZPMWxCUXpkRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlFUdFpRVU40UXl4UFFVRlBMRTlCUVU4c1EwRkJRVHRUUVVObU8xRkJSVVFzSzBSQlFTdEVPMUZCUXk5RUxFbEJRVWtzVDBGQlR5eERRVUZETEZOQlFWTXNSMEZCUnl4VFFVRlRMRVZCUVVVN1dVRkRha01zVDBGQlR6dG5Ra0ZEVEN4SlFVRkpPMmRDUVVOS0xFbEJRVWs3WjBKQlEwb3NTVUZCU1N4RlFVRkZMRTlCUVU4c1EwRkJReXhKUVVGSk8yZENRVU5zUWl4VFFVRlRMRVZCUVVVc1QwRkJUeXhEUVVGRExGTkJRVk03WVVGRE4wSXNRMEZCUVR0VFFVTkdPMUZCUlVRc2EwUkJRV3RFTzFGQlEyeEVMRWxCUVVrc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRhRU1zVDBGQlR5eFBRVUZQTEVOQlFVRTdVMEZEWmp0UlFVVkVMRFJEUVVFMFF6dFJRVU0xUXl4VFFVRlRMRmRCUVZjc1EwRkJReXhQUVVGcFFpeEZRVUZGTEVsQlFXTTdXVUZEY0VRc1QwRkJUeXhQUVVGUkxFZEJRVWNzU1VGQlN5eERRVUZCTzFGQlEzcENMRU5CUVVNN1VVRkZSQ3hKUVVGSkxGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRk8xbEJRMjVETEU5QlFVODdaMEpCUTB3c1NVRkJTVHRuUWtGRFNpeEpRVUZKTzJkQ1FVTktMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zU1VGQlNUdG5Ra0ZEYkVJc1UwRkJVeXhGUVVGRkxFOUJRVThzUTBGQlF5eFRRVUZUTzJGQlF6ZENMRU5CUVVFN1UwRkRSanRSUVVORUxGZEJRVmNzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVRTdVVUZETjBNc1QwRkJUeXhQUVVGUExFTkJRVUU3U1VGRGFFSXNRMEZCUXp0SlFVVkVPenM3VDBGSFJ6dEpRVU5JTEZOQlFWTXNVVUZCVVR0UlFVTm1MRTlCUVU4c1MwRkJTeXhEUVVGQk8wbEJRMlFzUTBGQlF6dEpRVVZFTEU5QlFVODdVVUZEVEN4WFFVRlhPMUZCUTFnc1kwRkJZenRSUVVOa0xGRkJRVkU3UzBGRFZDeERRVUZCTzBGQlEwZ3NRMEZCUXp0QlFXaElSQ3h2UTBGblNFTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJEVWtSVUxDQk5aWE56WVdkbExDQlFZWGxzYjJGa0xDQlRkR0YwWlNCOUlHWnliMjBnSnk0dmRIbHdaWE1uWEc1bGVIQnZjblFnS2lCbWNtOXRJQ2N1TDNSNWNHVnpKMXh1WEc1amIyNXpkQ0JuYkc5aVlXeENkV1ptWlhJZ1BTQW9aMnh2WW1Gc1ZHaHBjeUJoY3lCaGJua3BMa0oxWm1abGNseHVYRzR2S2lwY2JpQXFJRU52YlhCaGNtVWdjbUYzSUdSaGRHRXVYRzRnS2lCQWFXNTBaWEp1WVd4Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSE5oYldWRVlYUmhQRlErS0dFNklGUXNJR0k2SUZRcE9pQmliMjlzWldGdUlIdGNiaUFnTHk4Z1FYUWdjbVZtWlhKbGJtTmxJR3hsZG1Wc1hHNGdJR2xtSUNoaElEMDlQU0JpS1NCeVpYUjFjbTRnZEhKMVpWeHVYRzRnSUdsbUlDaGhJR2x1YzNSaGJtTmxiMllnVldsdWREaEJjbkpoZVNBbUppQmlJR2x1YzNSaGJtTmxiMllnVldsdWREaEJjbkpoZVNrZ2UxeHVJQ0FnSUdsbUlDaGhMbUo1ZEdWTVpXNW5kR2dnSVQwOUlHSXVZbmwwWlV4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1poYkhObFhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaExtSjVkR1ZNWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0ZiYVYwZ0lUMDlJR0piYVYwcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxYRzRnSUgxY2JseHVJQ0JwWmlBb1oyeHZZbUZzUW5WbVptVnlLU0I3WEc0Z0lDQWdhV1lnS0dFZ2FXNXpkR0Z1WTJWdlppQm5iRzlpWVd4Q2RXWm1aWElnSmlZZ1lpQnBibk4wWVc1alpXOW1JR2RzYjJKaGJFSjFabVpsY2lrZ2UxeHVJQ0FnSUNBZ0x5OGdSR1ZsY0NCc1pYWmxiRnh1SUNBZ0lDQWdjbVYwZFhKdUlDaGhJR0Z6SUdGdWVTa3VaWEYxWVd4ektHSXBYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHWmhiSE5sWEc1OVhHNWNiaThxS2x4dUlDb2dVM1JoZEdVZ2FYUmxjbUYwYjNKY2JpQXFJRUJwYm5SbGNtNWhiRnh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0cUlITjBZWFJsU1hSbGNtRjBiM0k4VkQ0b1hHNGdJSE4wWVhSbE9pQlRkR0YwWlR4VVBseHVLVG9nU1hSbGNtRmliR1ZKZEdWeVlYUnZjanhiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRkJoZVd4dllXUThWRDRnZkNCdWRXeHNYVDRnZTF4dUlDQm1iM0lnS0dOdmJuTjBJRnRyWlhreExDQjJZV3gxWlRGZElHOW1JSE4wWVhSbExtVnVkSEpwWlhNb0tTa2dlMXh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdXMnRsZVRJc0lIWmhiSFZsTWwwZ2IyWWdkbUZzZFdVeExtVnVkSEpwWlhNb0tTa2dlMXh1SUNBZ0lDQWdlV2xsYkdRZ1cydGxlVEVzSUd0bGVUSXNJSFpoYkhWbE1sMWNiaUFnSUNCOVhHNGdJSDFjYm4xY2JseHVMeW9xWEc0Z0tpQkFjSFZpYkdsalhHNGdLaUJEVWtSVUlIQnliM1J2WTI5c0xseHVJQ29nVTNSdmNtVnpJSFJvWlNCc1lYUmxjM1FnYzNSaGRHVXNJR0Z1WkNCa1pXTnBaR1Z6SUhkb1pXNWxkbVZ5SUhkbElHaGhkbVZjYmlBcUlIUnZJSEJ5YjJObGMzTWdZVzVrSUhOMGIzSmxJSFJvWlNCdVpYY2daR0YwWVNCcGJpQmpZWE5sSUdsMGN5QmhiaUIxY0dSaGRHVXNJRzl5WEc0Z0tpQjBieUJrYVhOallYSmtJR0Z1WkNCelpXNWtJRzkxY2lCc2IyTmhiQ0IyWVd4MVpTQmpZWFZ6WlNCeVpXMXZkR1VnYVhRbmN5QnZkWFJrWVhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdOeVpIUlFjbTkwYjJOdmJEeGNiaUFnVkNCbGVIUmxibVJ6SUc1MWJXSmxjaUI4SUZWcGJuUTRRWEp5WVhrZ2ZDQnpkSEpwYm1kY2JqNG9LVG9nUTFKRVZEeFVQaUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQk1iMk5oYkNCemRHRjBaU0IzYUdWeVpTQjNaU0J6ZEc5eVpTQjBhR1VnYkdGMFpYTjBJR3hoYlhCdmNuUWdkR2x0WlhOMFlXMXdYRzRnSUNBcUlHRnVaQ0IwYUdVZ2NtRjNJR1JoZEdFZ2RtRnNkV1ZjYmlBZ0lDb2dRR2x1ZEdWeWJtRnNYRzRnSUNBcUwxeHVJQ0JqYjI1emRDQnpkR0YwWlRvZ1UzUmhkR1U4VkQ0Z1BTQnVaWGNnVFdGd0tDbGNibHh1SUNBdktpcGNiaUFnSUNvZ1YyVWdjMmh2ZFd4a0lHTmhiR3dnZEdocGN5Qm1iaUJwYmlCdmNtUmxjaUIwYnlCMWNHUmhkR1VnZEdobElITjBZWFJsWEc0Z0lDQXFJRUJwYm5SbGNtNWhiRnh1SUNBZ0tpOWNiaUFnWm5WdVkzUnBiMjRnZFhCa1lYUmxVM1JoZEdVb1hHNGdJQ0FnYTJWNU1Ub2diblZ0WW1WeUxGeHVJQ0FnSUd0bGVUSTZJRzUxYldKbGNpeGNiaUFnSUNCa1lYUmhPaUJVSUh3Z2JuVnNiQ3hjYmlBZ0lDQnlaVzF2ZEdWVWFXMWxjM1JoYlhBNklHNTFiV0psY2x4dUlDQXBPaUJRWVhsc2IyRmtQRlErSUh0Y2JpQWdJQ0JqYjI1emRDQnJaWGt4Vm1Gc2RXVWdQU0J6ZEdGMFpTNW5aWFFvYTJWNU1TbGNiaUFnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCTllYUm9MbTFoZUNoY2JpQWdJQ0FnSUhKbGJXOTBaVlJwYldWemRHRnRjQ3hjYmlBZ0lDQWdJR3RsZVRGV1lXeDFaVDh1WjJWMEtHdGxlVElwUHk1MGFXMWxjM1JoYlhBZ2ZId2dNRnh1SUNBZ0lDbGNiaUFnSUNCcFppQW9hMlY1TVZaaGJIVmxLU0I3WEc0Z0lDQWdJQ0JyWlhreFZtRnNkV1V1YzJWMEtHdGxlVElzSUhzZ2RHbHRaWE4wWVcxd0xDQmtZWFJoSUgwcFhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR052Ym5OMElHNWxkMHRsZVRGV1lXeDFaU0E5SUc1bGR5Qk5ZWEFvS1Z4dUlDQWdJQ0FnYm1WM1MyVjVNVlpoYkhWbExuTmxkQ2hyWlhreUxDQjdJSFJwYldWemRHRnRjQ3dnWkdGMFlTQjlLVnh1SUNBZ0lDQWdjM1JoZEdVdWMyVjBLR3RsZVRFc0lHNWxkMHRsZVRGV1lXeDFaU2xjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhzZ2RHbHRaWE4wWVcxd0xDQmtZWFJoSUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRjbVZoZEdVZ1lXNGdaWFpsYm5RZ1ptOXlJSFJvWlNCemNHVmphV1pwWldRZ2EyVjVJR0Z1WkNCemRHOXlaU0IwYUdVZ2JtVjNJR1JoZEdFZ1lXNWtYRzRnSUNBcUlHeGhiWEJ2Y25RZ2RHbHRaWE4wYldGd0lHbHVZM0psYldWdWRHVmtJR0o1SUc5dVpTQnBiaUIwYUdVZ2MzUmhkR1V1WEc0Z0lDQXFJRUJ3ZFdKc2FXTmNiaUFnSUNvdlhHNGdJR1oxYm1OMGFXOXVJR055WldGMFpVVjJaVzUwS0d0bGVURTZJRzUxYldKbGNpd2dhMlY1TWpvZ2JuVnRZbVZ5TENCa1lYUmhPaUJVSUh3Z2JuVnNiQ2s2SUUxbGMzTmhaMlU4VkQ0Z2UxeHVJQ0FnSUM4dklFbHVZM0psYldWdWRDQjBhR1VnZEdsdFpYTjBZVzF3WEc0Z0lDQWdZMjl1YzNRZ2RHbHRaWE4wWVcxd0lEMGdLSE4wWVhSbExtZGxkQ2hyWlhreEtUOHVaMlYwS0d0bGVUSXBQeTUwYVcxbGMzUmhiWEFnZkh3Z01Da2dLeUF4WEc0Z0lDQWdkWEJrWVhSbFUzUmhkR1VvYTJWNU1Td2dhMlY1TWl3Z1pHRjBZU3dnZEdsdFpYTjBZVzF3S1Z4dVhHNGdJQ0FnY21WMGRYSnVJSHNnYTJWNU1Td2dhMlY1TWl3Z1pHRjBZU3dnZEdsdFpYTjBZVzF3SUgxY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlFjbTlqWlhOeklIUm9aU0J5WldObGFYWmxaQ0J0WlhOellXZGxJRzl1YkhrZ2FXWWdkR2hsSUd4aGJYQnZjblFnYm5WdFltVnlJSEpsWTJsbGRtVmtJR2x6SUdocFoyaGxjbHh1SUNBZ0tpQjBhR0Z1SUhSb1pTQnpkRzl5WldRZ2IyNWxMaUJKWmlCcGRITWdiRzkzWlhJc0lIZGxJSE53Y21WaFpDQnBkQ0IwYnlCMGFHVWdibVYwZDI5eWF5QjBieUJqYjNKeVpXTjBJSFJvWlNCd1pXVnlMbHh1SUNBZ0tpQkpaaUIwYUdWNUlHRnlaU0JsY1hWaGJDd2dkR2hsSUdKcFoyZGxjaUJ5WVhjZ1pHRjBZU0IzYVc1ekxseHVYRzRnSUNBcUlGSmxkSFZ5Ym5NZ2RHaGxJSEpsWTJsbGRtVmtJR1JoZEdFZ2FXWWdkR2hsSUd4aGJYQnZjblFnYm5WdFltVnlJSGRoY3lCaWFXZG5aWElnZEdoaGJpQnZkWEp6TGx4dUlDQWdLaUJKWmlCcGRDQjNZWE1nWVc0Z2IzVjBaR0YwWldRZ2JXVnpjMkZuWlN3Z2RHaGxiaUIzWlNCeVpYUjFjbTRnZG05cFpGeHVJQ0FnS2lCQWNIVmliR2xqWEc0Z0lDQXFMMXh1SUNCbWRXNWpkR2x2YmlCd2NtOWpaWE56VFdWemMyRm5aU2h0WlhOellXZGxPaUJOWlhOellXZGxQRlErS1RvZ1RXVnpjMkZuWlR4VVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCclpYa3hMQ0JyWlhreUxDQmtZWFJoTENCMGFXMWxjM1JoYlhBZ2ZTQTlJRzFsYzNOaFoyVmNiaUFnSUNCamIyNXpkQ0JqZFhKeVpXNTBJRDBnYzNSaGRHVXVaMlYwS0d0bGVURXBQeTVuWlhRb2EyVjVNaWxjYmx4dUlDQWdJQzh2SUZSb1pTQnlaV05sYVhabFpDQnRaWE56WVdkbElHbHpJRDRnZEdoaGJpQnZkWElnWTNWeWNtVnVkQ0IyWVd4MVpTd2dkWEJrWVhSbElHOTFjaUJ6ZEdGMFpTNWNiaUFnSUNCcFppQW9JV04xY25KbGJuUWdmSHdnWTNWeWNtVnVkQzUwYVcxbGMzUmhiWEFnUENCMGFXMWxjM1JoYlhBcElIdGNiaUFnSUNBZ0lIVndaR0YwWlZOMFlYUmxLR3RsZVRFc0lHdGxlVElzSUdSaGRHRXNJSFJwYldWemRHRnRjQ2xjYmlBZ0lDQWdJSEpsZEhWeWJpQnRaWE56WVdkbFhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1QzVjBaR0YwWldRZ1RXVnpjMkZuWlM0Z1VtVnpaVzVrSUc5MWNpQnpkR0YwWlNCdFpYTnpZV2RsSUhSb2NtOTFaMmdnZEdobElIZHBjbVV1WEc0Z0lDQWdhV1lnS0dOMWNuSmxiblF1ZEdsdFpYTjBZVzF3SUQ0Z2RHbHRaWE4wWVcxd0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ0lDQnJaWGt4TEZ4dUlDQWdJQ0FnSUNCclpYa3lMRnh1SUNBZ0lDQWdJQ0JrWVhSaE9pQmpkWEp5Wlc1MExtUmhkR0VzWEc0Z0lDQWdJQ0FnSUhScGJXVnpkR0Z0Y0RvZ1kzVnljbVZ1ZEM1MGFXMWxjM1JoYlhCY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlCVFlXMWxJR1JoZEdFc0lITmhiV1VnZEdsdFpYTjBZVzF3TGlCWFpXbHlaRzhnWldOb2J5QnRaWE56WVdkbExseHVJQ0FnSUdsbUlDaHpZVzFsUkdGMFlTaGpkWEp5Wlc1MExtUmhkR0VzSUdSaGRHRXBLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiV1Z6YzJGblpWeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklGSmhZMlVnWTI5dVpHbDBhVzl1TENCellXMWxJSFJwYldWemRHRnRjQ0JrYVdabUlHUmhkR0V1WEc0Z0lDQWdablZ1WTNScGIyNGdZMjl0Y0dGeVpVUmhkR0VvWTNWeWNtVnVkRG9nVkNCOElHNTFiR3dzSUdSaGRHRTZJRlFnZkNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZM1Z5Y21WdWRDRWdQaUJrWVhSaElWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGpiMjF3WVhKbFJHRjBZU2hqZFhKeVpXNTBMbVJoZEdFc0lHUmhkR0VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnSUNCclpYa3hMRnh1SUNBZ0lDQWdJQ0JyWlhreUxGeHVJQ0FnSUNBZ0lDQmtZWFJoT2lCamRYSnlaVzUwTG1SaGRHRXNYRzRnSUNBZ0lDQWdJSFJwYldWemRHRnRjRG9nWTNWeWNtVnVkQzUwYVcxbGMzUmhiWEJjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2RYQmtZWFJsVTNSaGRHVW9hMlY1TVN3Z2EyVjVNaXdnWkdGMFlTd2dkR2x0WlhOMFlXMXdLUzVrWVhSaFhHNGdJQ0FnY21WMGRYSnVJRzFsYzNOaFoyVmNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJTWlhSMWNtNXpJSFJvWlNCamRYSnlaVzUwSUhOMFlYUmxYRzRnSUNBcUlFQndkV0pzYVdOY2JpQWdJQ292WEc0Z0lHWjFibU4wYVc5dUlHZGxkRk4wWVhSbEtDazZJRk4wWVhSbFBGUStJSHRjYmlBZ0lDQnlaWFIxY200Z2MzUmhkR1ZjYmlBZ2ZWeHVYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdZM0psWVhSbFJYWmxiblFzWEc0Z0lDQWdjSEp2WTJWemMwMWxjM05oWjJVc1hHNGdJQ0FnWjJWMFUzUmhkR1ZjYmlBZ2ZWeHVmVnh1SWwxOSIsIi8qKlxuICogVGFrZSB0aGUgbWF4IGJldHdlZW4gY3VycmVudFNpemUgYW5kIGludGVuZGVkU2l6ZSBhbmQgdGhlbiBwbHVzIDEwMjQuIFRoZW4sXG4gKiAgZmluZCB0aGUgbmV4dCBuZWFyZXIgbXVsdGlwbGUgb2YgMTAyNC5cbiAqIEBwYXJhbSBjdXJyZW50U2l6ZSAtIG51bWJlclxuICogQHBhcmFtIGludGVuZGVkU2l6ZSAtIG51bWJlclxuICogQHJldHVybnMgdGhlIGNhbGN1bGF0ZWQgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIGdldE5leHRTaXplKGN1cnJlbnRTaXplOiBudW1iZXIsIGludGVuZGVkU2l6ZTogbnVtYmVyKSB7XG4gIGNvbnN0IG1pbk5ld1NpemUgPSBNYXRoLm1heChjdXJyZW50U2l6ZSwgaW50ZW5kZWRTaXplKSArIDEwMjRcbiAgcmV0dXJuIE1hdGguY2VpbChtaW5OZXdTaXplIC8gMTAyNCkgKiAxMDI0XG59XG5cbi8qKlxuICogQHBhcmFtIHdyaXRpbmcgLSB3cml0aW5nIG9wdGlvbiwgc2VlIG9iamVjdCBzcGVjcy5cbiAqIEBwYXJhbSByZWFkaW5nIC0gcmVhZGluZyBvcHRpb24sIHNlZSBvYmplY3Qgc3BlY3MuXG4gKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IC0gSW5pdGlhbCBjYXBhY2l0eSBvZiBidWZmZXIgdG8gYWxsb2NhdGUsIGlnbm9yZWQgaWYgeW91IHVzZSB3cml0aW5nIG9yIHJlYWRpbmcgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUJ5dGVCdWZmZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBhIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCB0byByZWFkIGZyb20gdGhlcmUuXG4gICAqIEBwYXJhbSBjdXJyZW50T2Zmc2V0IC0gc2V0IHRoZSBjdXJzb3Igd2hlcmUgYmVnaW5zIHRvIHJlYWQuIERlZmF1bHQgMFxuICAgKiBAcGFyYW0gbGVuZ3RoIC0gZGVsaW1pdGUgd2hlcmUgdGhlIHZhbGlkIGRhdGEgZW5kcy4gRGVmYXVsdDogYnVmZmVyLmxlbmd0aFxuICAgKi9cbiAgcmVhZGluZz86IHtcbiAgICBidWZmZXI6IFVpbnQ4QXJyYXlcbiAgICBsZW5ndGg/OiBudW1iZXJcbiAgICBjdXJyZW50T2Zmc2V0OiBudW1iZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYnVmZmVyIC0gYSBidWZmZXIgYWxyZWFkeSBhbGxvY2F0ZWQgdG8gd3JpdGUgdGhlcmUuXG4gICAqIEBwYXJhbSBjdXJyZW50T2Zmc2V0IC0gc2V0IHRoZSBjdXJzb3IgdG8gbm90IHN0YXJ0IHdyaXRpbmcgZnJvbSB0aGUgYmVnaW4gb2YgaXQuIERlZmF1bHQgMFxuICAgKi9cbiAgd3JpdGluZz86IHtcbiAgICBidWZmZXI6IFVpbnQ4QXJyYXlcbiAgICBjdXJyZW50T2Zmc2V0PzogbnVtYmVyXG4gIH1cblxuICBpbml0aWFsQ2FwYWNpdHk/OiBudW1iZXJcbn1cblxuY29uc3QgZGVmYXVsdEluaXRpYWxDYXBhY2l0eSA9IDEwMjQwXG5cbi8qKlxuICogQnl0ZUJ1ZmZlciBpcyBhIHdyYXBwZXIgb2YgRGF0YVZpZXcgd2hpY2ggYWxzbyBhZGRzIGEgcmVhZCBhbmQgd3JpdGUgb2Zmc2V0LlxuICogIEFsc28gaW4gYSB3cml0ZSBvcGVyYXRpb24gaXQgcmVzaXplcyB0aGUgYnVmZmVyIGlzIGJlaW5nIHVzZWQgaWYgaXQgbmVlZHMuXG4gKlxuICogLSBVc2UgcmVhZCBhbmQgd3JpdGUgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgb3IgY29uc3VtZSBkYXRhLlxuICogLSBVc2Ugc2V0IGFuZCBnZXQgb25seSBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3UncmUgZG9pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCeXRlQnVmZmVyKG9wdGlvbnM6IENyZWF0ZUJ5dGVCdWZmZXJPcHRpb25zID0ge30pIHtcbiAgY29uc3QgaW5pdGlhbFJPZmZzZXQ6IG51bWJlciA9IG9wdGlvbnMucmVhZGluZz8uY3VycmVudE9mZnNldCB8fCAwXG4gIGxldCBpbml0aWFsQnVmZmVyOiBVaW50OEFycmF5IHwgbnVsbCA9IG51bGxcbiAgbGV0IGluaXRpYWxXT2Zmc2V0OiBudW1iZXIgPSAwXG5cbiAgaWYgKG9wdGlvbnMud3JpdGluZykge1xuICAgIGluaXRpYWxCdWZmZXIgPSBvcHRpb25zLndyaXRpbmcuYnVmZmVyXG4gICAgaWYgKG9wdGlvbnMud3JpdGluZy5jdXJyZW50T2Zmc2V0KSB7XG4gICAgICBpbml0aWFsV09mZnNldCA9IG9wdGlvbnMud3JpdGluZy5jdXJyZW50T2Zmc2V0XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMucmVhZGluZykge1xuICAgIGluaXRpYWxCdWZmZXIgPSBvcHRpb25zLnJlYWRpbmcuYnVmZmVyXG4gICAgaW5pdGlhbFdPZmZzZXQgPSBvcHRpb25zLnJlYWRpbmcubGVuZ3RoIHx8IG9wdGlvbnMucmVhZGluZy5idWZmZXIubGVuZ3RoXG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KFxuICAgICAgb3B0aW9ucy5pbml0aWFsQ2FwYWNpdHkgfHwgZGVmYXVsdEluaXRpYWxDYXBhY2l0eVxuICAgIClcbiAgfVxuXG4gIGxldCBidWZmZXI6IFVpbnQ4QXJyYXkgPSBpbml0aWFsQnVmZmVyIVxuICBsZXQgdmlldzogRGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlciwgYnVmZmVyLmJ5dGVPZmZzZXQpXG4gIGxldCB3b2Zmc2V0OiBudW1iZXIgPSBpbml0aWFsV09mZnNldFxuICBsZXQgcm9mZnNldDogbnVtYmVyID0gaW5pdGlhbFJPZmZzZXRcblxuICAvKipcbiAgICogSW5jcmVlbWVudCB0aGUgd3JpdGUgb2Zmc2V0IGFuZCByZXNpemUgdGhlIGJ1ZmZlciBpZiBpdCBuZWVkcy5cbiAgICovXG4gIGNvbnN0IHdvQWRkID0gKGFtb3VudDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHdvZmZzZXQgKyBhbW91bnQgPiBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgY29uc3QgbmV3c2l6ZSA9IGdldE5leHRTaXplKGJ1ZmZlci5ieXRlTGVuZ3RoLCB3b2Zmc2V0ICsgYW1vdW50KVxuICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3c2l6ZSlcbiAgICAgIG5ld0J1ZmZlci5zZXQoYnVmZmVyKVxuICAgICAgYnVmZmVyID0gbmV3QnVmZmVyXG4gICAgICB2aWV3ID0gbmV3IERhdGFWaWV3KGJ1ZmZlci5idWZmZXIpXG4gICAgfVxuXG4gICAgd29mZnNldCArPSBhbW91bnRcbiAgICByZXR1cm4gd29mZnNldCAtIGFtb3VudFxuICB9XG5cbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgcmVhZCBvZmZzZXQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3MgdHJ5aW5nIHRvIHJlYWRcbiAgICogIG91dHNpZGUgdGhlIGJvdW5kcy5cbiAgICovXG4gIGNvbnN0IHJvQWRkID0gKGFtb3VudDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHJvZmZzZXQgKyBhbW91bnQgPiB3b2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ091dHNpZGUgb2YgdGhlIGJvdW5kcyBvZiB3cml0ZW4gZGF0YS4nKVxuICAgIH1cblxuICAgIHJvZmZzZXQgKz0gYW1vdW50XG4gICAgcmV0dXJuIHJvZmZzZXQgLSBhbW91bnRcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGVudGlyZSBjdXJyZW50IFVpbnQ4QXJyYXkuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HOiBpZiB0aGUgYnVmZmVyIGdyb3dzLCB0aGUgdmlldyBoYWQgY2hhbmdlZCBpdHNlbGYsXG4gICAgICogIGFuZCB0aGUgcmVmZXJlbmNlIHdpbGwgYmUgYSBpbnZhbGlkIG9uZS5cbiAgICAgKi9cbiAgICBidWZmZXIoKTogVWludDhBcnJheSB7XG4gICAgICByZXR1cm4gYnVmZmVyXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY2FwYWNpdHkgb2YgdGhlIGN1cnJlbnQgYnVmZmVyXG4gICAgICovXG4gICAgYnVmZmVyTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gYnVmZmVyLmxlbmd0aFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogUmVzZXRzIGJ5dGVCdWZmZXIgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgb25lXG4gICAgICovXG4gICAgcmVzZXRCdWZmZXIoKTogdm9pZCB7XG4gICAgICByb2Zmc2V0ID0gMFxuICAgICAgd29mZnNldCA9IDBcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHJlYWQgb2Zmc2V0XG4gICAgICovXG4gICAgY3VycmVudFJlYWRPZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiByb2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCB3cml0ZSBvZmZzZXRcbiAgICAgKi9cbiAgICBjdXJyZW50V3JpdGVPZmZzZXQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZWFkaW5nIHB1cnBvc2VcbiAgICAgKiBSZXR1cm5zIHRoZSBwcmV2aXVvcyBvZmZzc2V0IHNpemUgYmVmb3JlIGluY3JlbWVudGluZ1xuICAgICAqL1xuICAgIGluY3JlbWVudFJlYWRPZmZzZXQoYW1vdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHJvQWRkKGFtb3VudClcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEhvdyBtYW55IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gcmVhZC5cbiAgICAgKi9cbiAgICByZW1haW5pbmdCeXRlcygpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXQgLSByb2Zmc2V0XG4gICAgfSxcbiAgICByZWFkRmxvYXQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRGbG9hdDY0KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZEludDgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDgocm9BZGQoMSkpXG4gICAgfSxcbiAgICByZWFkSW50MTYoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDE2KHJvQWRkKDIpKVxuICAgIH0sXG4gICAgcmVhZEludDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQzMihyb0FkZCg0KSlcbiAgICB9LFxuICAgIHJlYWRJbnQ2NCgpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnSW50NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkVWludDgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KHJvQWRkKDEpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQxNigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KHJvQWRkKDIpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQzMigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZFVpbnQ2NCgpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnVWludDY0KHJvQWRkKDgpKVxuICAgIH0sXG4gICAgcmVhZEJ1ZmZlcigpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuZ2V0VWludDMyKHJvQWRkKDQpKVxuICAgICAgcmV0dXJuIGJ1ZmZlci5zdWJhcnJheShyb0FkZChsZW5ndGgpLCByb0FkZCgwKSlcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFdyaXRpbmcgcHVycG9zZVxuICAgICAqL1xuICAgIC8qKlxuICAgICAqIEluY3JlbWVudCBvZmZzZXRcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gaG93IG1hbnkgYnl0ZXNcbiAgICAgKiBAcmV0dXJucyBUaGUgb2Zmc2V0IHdoZW4gdGhpcyByZXNlcnZpbmcgc3RhcnRzLlxuICAgICAqL1xuICAgIGluY3JlbWVudFdyaXRlT2Zmc2V0KGFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b0FkZChhbW91bnQpXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXRlbiBpbiB0aGUgYnVmZmVyLlxuICAgICAqL1xuICAgIHNpemUoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB3b2Zmc2V0XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUYWtlIGNhcmUgdXNpbmcgdGhpcyBmdW5jdGlvbiwgaWYgeW91IG1vZGlmeSB0aGUgZGF0YSBhZnRlciwgdGhlXG4gICAgICogcmV0dXJuZWQgc3ViYXJyYXkgd2lsbCBjaGFuZ2UgdG9vLiBJZiB5b3UnbGwgbW9kaWZ5IHRoZSBjb250ZW50IG9mIHRoZVxuICAgICAqIGJ5dGVidWZmZXIsIG1heWJlIHlvdSB3YW50IHRvIHVzZSB0b0NvcGllZEJpbmFyeSgpXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViYXJyYXkgZnJvbSAwIHRvIG9mZnNldCBhcyByZWZlcmVuY2UuXG4gICAgICovXG4gICAgdG9CaW5hcnkoKSB7XG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KDAsIHdvZmZzZXQpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNhZmUgY29waWVkIGJ1ZmZlciBvZiB0aGUgY3VycmVudCBkYXRhIG9mIEJ5dGVCdWZmZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBzdWJhcnJheSBmcm9tIDAgdG8gb2Zmc2V0LlxuICAgICAqL1xuICAgIHRvQ29waWVkQmluYXJ5KCkge1xuICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHRoaXMudG9CaW5hcnkoKSlcbiAgICB9LFxuXG4gICAgd3JpdGVCdWZmZXIodmFsdWU6IFVpbnQ4QXJyYXksIHdyaXRlTGVuZ3RoOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgaWYgKHdyaXRlTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMud3JpdGVVaW50MzIodmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbyA9IHdvQWRkKHZhbHVlLmJ5dGVMZW5ndGgpXG4gICAgICBidWZmZXIuc2V0KHZhbHVlLCBvKVxuICAgIH0sXG4gICAgd3JpdGVGbG9hdDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRGbG9hdDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVGbG9hdDY0KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRGbG9hdDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQ4KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgxKVxuICAgICAgdmlldy5zZXRJbnQ4KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQxNih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMilcbiAgICAgIHZpZXcuc2V0SW50MTYobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDMyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg0KVxuICAgICAgdmlldy5zZXRJbnQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50NjQodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEJpZ0ludDY0KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50OCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMSlcbiAgICAgIHZpZXcuc2V0VWludDgobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQxNih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoMilcbiAgICAgIHZpZXcuc2V0VWludDE2KG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldFVpbnQzMihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDY0KHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCg4KVxuICAgICAgdmlldy5zZXRCaWdVaW50NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICAvLyBEYXRhdmlldyBQcm94eVxuICAgIGdldEZsb2F0MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRGbG9hdDY0KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50OChvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRJbnQ4KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDE2KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDE2KG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldEludDY0KG9mZnNldDogbnVtYmVyKTogYmlnaW50IHtcbiAgICAgIHJldHVybiB2aWV3LmdldEJpZ0ludDY0KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQ4KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQxNihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MTYob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDMyKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQzMihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50NjQob2Zmc2V0OiBudW1iZXIpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnVWludDY0KG9mZnNldClcbiAgICB9LFxuICAgIHNldEZsb2F0MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0RmxvYXQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0RmxvYXQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRGbG9hdDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQ4KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEludDgob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDE2KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEludDE2KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRJbnQzMihvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0QmlnSW50NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQ4KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50MTYob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0VWludDE2KG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50MzIob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0VWludDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRVaW50NjQob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0QmlnVWludDY0KG9mZnNldCwgdmFsdWUpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBCeXRlQnVmZmVyID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlQnl0ZUJ1ZmZlcj5cbiIsIi8qKlxuICogVGhlIHdpcmUgbWVzc2FnZSBpcyB0aGUgdG9wLWxldmVsIG1lc3NhZ2UgdGhhdCBjYW4gYmUgcGFja2VkXG4gKiAgaW5zaWRlIGl0IGNhbiBjb250YWluIGEgZGF0YSB3aXRoIGFub3RoZXIgc3RydWN0dXJlIG9yIHByb3RvY29sXG4gKlxuICogRWFjaCB3aXJlIG1lc3NhZ2UgaGFzIHRocmVlIHByaW1pdGl2ZSBwcm9wZXJ0eSB0aGF0IGl0J2xsIG5ldmVyIGNoYW5nZVxuICogICAtLS0+IGxlbmd0aCAgICAgICAgdWludDMyIChtZXNzYWdlIHNpemUgdXAgdG8gNCwyOTQsOTY3LDI5NSlcbiAqICAgLS0tPiB2ZXJzaW9uICAgICAgIHVpbnQzMiAoZm9yIG5vdyBqdXN0IGEgbnVtYmVyIHdoaWNoIGlzIHplcm8pXG4gKiAgIC0tLT4gbWVzc2FnZSB0eXBlICB1aW50MzJcbiAqIFRoZSBsZW5ndGggaW5kaWNhdGVzIGhvdyBtYW55IGJ5dGVzIGFyZSBhYm92ZSBzZWxmLCB0aGUgdmVyc2lvbiBpblxuICogY29tYmluYXRpb24gd2l0aCBtZXNzYWdlIHR5cGUgZGVmaW5lcyB0aGUgc2V0IG9mIGhhbmRsZXJzIHRoYXQgd2lsbCBiZVxuICogYXZhaWxhYmxlIHRvIHByb2Nlc3MgdGhlIG1lc3NhZ2VcbiAqXG4gKi9cblxuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4vQnl0ZUJ1ZmZlcidcblxudHlwZSBVaW50MzIgPSBudW1iZXJcblxuZXhwb3J0IG5hbWVzcGFjZSBXaXJlTWVzc2FnZSB7XG4gIGV4cG9ydCBlbnVtIEVudW0ge1xuICAgIFJFU0VSVkVEID0gMCxcblxuICAgIC8vIENvbXBvbmVudCBPcGVyYXRpb25cbiAgICBQVVRfQ09NUE9ORU5UID0gMSxcbiAgICBERUxFVEVfQ09NUE9ORU5UID0gMixcblxuICAgIE1BWF9NRVNTQUdFX1RZUEVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbGVuZ3RoIC0gVWludDMyIHRoZSBsZW5ndGggb2YgYWxsIG1lc3NhZ2UgKGluY2x1ZGluZyB0aGUgaGVhZGVyKVxuICAgKiBAcGFyYW0gdHlwZSAtIGRlZmluZSB0aGUgZnVuY3Rpb24gd2hpY2ggaGFuZGxlcyB0aGUgZGF0YVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSGVhZGVyID0ge1xuICAgIGxlbmd0aDogVWludDMyXG4gICAgdHlwZTogVWludDMyXG4gIH1cblxuICBleHBvcnQgY29uc3QgSEVBREVSX0xFTkdUSCA9IDhcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIHRoZSBtZXNzYWdlIGluY29taW5nIGlzIGNvbXBsZXRlZFxuICAgKiBAcGFyYW0gYnVmIC0gQnl0ZUJ1ZmZlclxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKGJ1ZjogQnl0ZUJ1ZmZlcikge1xuICAgIGNvbnN0IHJlbSA9IGJ1Zi5yZW1haW5pbmdCeXRlcygpXG4gICAgaWYgKHJlbSA8IEhFQURFUl9MRU5HVEgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSBidWYuZ2V0VWludDMyKGJ1Zi5jdXJyZW50UmVhZE9mZnNldCgpKVxuICAgIGlmIChyZW0gPCBtZXNzYWdlTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlYWRIZWFkZXIoYnVmOiBCeXRlQnVmZmVyKTogSGVhZGVyIHwgbnVsbCB7XG4gICAgaWYgKCF2YWxpZGF0ZShidWYpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZW5ndGg6IGJ1Zi5yZWFkVWludDMyKCksXG4gICAgICB0eXBlOiBidWYucmVhZFVpbnQzMigpIGFzIEVudW1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2lyZU1lc3NhZ2VcbiIsImltcG9ydCB7IENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9lbmdpbmUvY29tcG9uZW50J1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi4vLi4vZW5naW5lL2VudGl0eSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9CeXRlQnVmZmVyJ1xuaW1wb3J0IFdpcmVNZXNzYWdlIGZyb20gJy4uL3dpcmVNZXNzYWdlJ1xuXG5leHBvcnQgbmFtZXNwYWNlIENvbXBvbmVudE9wZXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gZW50aXR5IC0gVWludDMyIG51bWJlciBvZiB0aGUgZW50aXR5XG4gICAqIEBwYXJhbSBjb21wb25lbnRJZCAtIFVpbnQzMiBudW1iZXIgb2YgaWRcbiAgICogQHBhcmFtIHRpbWVzdGFtcCAtIFVpbnQ2NCBMYW1wb3J0IHRpbWVzdGFtcFxuICAgKiBAcGFyYW0gZGF0YSAtIFVpbnQ4W10gZGF0YSBvZiBjb21wb25lbnRcbiAgICovXG4gIGV4cG9ydCB0eXBlIElQdXRDb21wb25lbnQgPSB7XG4gICAgZW50aXR5OiBFbnRpdHlcbiAgICBjb21wb25lbnRJZDogbnVtYmVyXG4gICAgdGltZXN0YW1wOiBudW1iZXJcbiAgICBkYXRhOiBVaW50OEFycmF5XG4gIH1cbiAgZXhwb3J0IHR5cGUgSURlbGV0ZUNvbXBvbmVudCA9IHtcbiAgICBlbnRpdHk6IEVudGl0eVxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgICB0aW1lc3RhbXA6IG51bWJlclxuICAgIGRhdGE/OiB1bmRlZmluZWRcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBNRVNTQUdFX0hFQURFUl9MRU5HVEggPSAyMFxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBhbiBvcHRpbWFsIHdyaXRpbmcgZGF0YSBwYXNzaW5nIHRoZSBCeXRlQnVmZmVyXG4gICAqICBhbHJlYWR5IGFsbG9jYXRlZFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIHdyaXRlKFxuICAgIHR5cGU6IFdpcmVNZXNzYWdlLkVudW0sXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdGltZXN0YW1wOiBudW1iZXIsXG4gICAgY29tcG9uZW50RGVmaW5pdGlvbjogQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgICBidWY6IEJ5dGVCdWZmZXJcbiAgKSB7XG4gICAgLy8gcmVzZXJ2ZSB0aGUgYmVnaW5uaW5nXG4gICAgY29uc3Qgc3RhcnRNZXNzYWdlT2Zmc2V0ID0gYnVmLmluY3JlbWVudFdyaXRlT2Zmc2V0KFxuICAgICAgV2lyZU1lc3NhZ2UuSEVBREVSX0xFTkdUSCArIE1FU1NBR0VfSEVBREVSX0xFTkdUSFxuICAgIClcblxuICAgIC8vIHdyaXRlIGJvZHlcbiAgICBpZiAodHlwZSA9PT0gV2lyZU1lc3NhZ2UuRW51bS5QVVRfQ09NUE9ORU5UKSB7XG4gICAgICBjb21wb25lbnREZWZpbml0aW9uLndyaXRlVG9CeXRlQnVmZmVyKGVudGl0eSwgYnVmKVxuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlTGVuZ3RoID0gYnVmLnNpemUoKSAtIHN0YXJ0TWVzc2FnZU9mZnNldFxuXG4gICAgLy8gV3JpdGUgV2lyZU1lc3NhZ2UgaGVhZGVyXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQsIG1lc3NhZ2VMZW5ndGgpXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyA0LCB0eXBlKVxuXG4gICAgLy8gV3JpdGUgQ29tcG9uZW50T3BlcmF0aW9uIGhlYWRlclxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgOCwgZW50aXR5KVxuICAgIGJ1Zi5zZXRVaW50MzIoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMTIsIGNvbXBvbmVudERlZmluaXRpb24uX2lkKVxuICAgIGJ1Zi5zZXRVaW50NjQoc3RhcnRNZXNzYWdlT2Zmc2V0ICsgMTYsIEJpZ0ludCh0aW1lc3RhbXApKVxuICAgIGJ1Zi5zZXRVaW50MzIoXG4gICAgICBzdGFydE1lc3NhZ2VPZmZzZXQgKyAyNCxcbiAgICAgIG1lc3NhZ2VMZW5ndGggLSBNRVNTQUdFX0hFQURFUl9MRU5HVEggLSBXaXJlTWVzc2FnZS5IRUFERVJfTEVOR1RIXG4gICAgKVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIHJlYWQoXG4gICAgYnVmOiBCeXRlQnVmZmVyXG4gICk6IChXaXJlTWVzc2FnZS5IZWFkZXIgJiAoSVB1dENvbXBvbmVudCB8IElEZWxldGVDb21wb25lbnQpKSB8IG51bGwge1xuICAgIGNvbnN0IGhlYWRlciA9IFdpcmVNZXNzYWdlLnJlYWRIZWFkZXIoYnVmKVxuXG4gICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgY29tbW9uID0ge1xuICAgICAgLi4uaGVhZGVyLFxuICAgICAgZW50aXR5OiBidWYucmVhZFVpbnQzMigpIGFzIEVudGl0eSxcbiAgICAgIGNvbXBvbmVudElkOiBidWYucmVhZEludDMyKCksXG4gICAgICB0aW1lc3RhbXA6IE51bWJlcihidWYucmVhZFVpbnQ2NCgpKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXIudHlwZSA9PT0gV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UKSB7XG4gICAgICByZXR1cm4gY29tbW9uXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbW1vbixcbiAgICAgIGRhdGE6IGJ1Zi5yZWFkQnVmZmVyKClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGNyZHRQcm90b2NvbCwgTWVzc2FnZSBhcyBDcmR0TWVzc2FnZSB9IGZyb20gJ0BkY2wvY3JkdCdcblxuaW1wb3J0IHR5cGUgeyBQcmVFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmUnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IHsgY3JlYXRlQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IENvbXBvbmVudE9wZXJhdGlvbiBhcyBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9jcmR0L2NvbXBvbmVudE9wZXJhdGlvbidcbmltcG9ydCBXaXJlTWVzc2FnZSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL3dpcmVNZXNzYWdlJ1xuaW1wb3J0IHsgVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjZWl2ZU1lc3NhZ2UsIFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JkdFNjZW5lU3lzdGVtKHtcbiAgZW5naW5lLFxuICB0cmFuc3BvcnRzXG59OiB7XG4gIGVuZ2luZTogUHJlRW5naW5lXG4gIHRyYW5zcG9ydHM6IFRyYW5zcG9ydFtdXG59KSB7XG4gIC8vIENSRFQgQ2xpZW50XG4gIGNvbnN0IGNyZHRDbGllbnQgPSBjcmR0UHJvdG9jb2w8VWludDhBcnJheT4oKVxuICAvLyBNZXNzYWdlcyB0aGF0IHdlIHJlY2VpdmVkIGF0IHRyYW5zcG9ydC5vbk1lc3NhZ2Ugd2FpdGluZyB0byBiZSBwcm9jZXNzZWRcbiAgY29uc3QgcmVjZWl2ZWRNZXNzYWdlczogUmVjZWl2ZU1lc3NhZ2VbXSA9IFtdXG4gIC8vIE1lc3NhZ2VzIGFscmVhZHkgcHJvY2Vzc2VkIGJ5IHRoZSBlbmdpbmUgYnV0IHRoYXQgd2UgbmVlZCB0byBicm9hZGNhc3QgdG8gb3RoZXIgdHJhbnNwb3J0cy5cbiAgY29uc3QgdHJhbnNwb3J0TWVzc2FnZXM6IFRyYW5zcG9ydE1lc3NhZ2VbXSA9IFtdXG4gIC8vIE1hcCBvZiBlbnRpdGllcyBhbHJlYWR5IHByb2Nlc3NlZCBhdCBsZWFzdCBvbmNlXG5cbiAgdHJhbnNwb3J0cy5mb3JFYWNoKFxuICAgICh0cmFuc3BvcnQpID0+ICh0cmFuc3BvcnQub25tZXNzYWdlID0gcGFyc2VDaHVua01lc3NhZ2UodHJhbnNwb3J0LnR5cGUpKVxuICApXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc3BvcnRUeXBlIHRyYW5wb3J0IGlkIHRvIGlkZW50aXkgbWVzc2FnZXNcbiAgICogQHJldHVybnMgYSBmdW5jdGlvbiB0byBwcm9jZXNzIHJlY2VpdmVkIG1lc3NhZ2VzXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZUNodW5rTWVzc2FnZSh0cmFuc3BvcnRUeXBlOiBzdHJpbmcpIHtcbiAgICAvKipcbiAgICAgKiBSZWNlaXZlcyBhIGNodW5rIG9mIGJpbmFyeSBtZXNzYWdlcyBhbmQgc3RvcmVzIGFsbCB0aGUgdmFsaWRcbiAgICAgKiBDb21wb25lbnQgT3BlcmF0aW9uIE1lc3NhZ2VzIGF0IG1lc3NhZ2VzIHF1ZXVlXG4gICAgICogQHBhcmFtIGNodW5rTWVzc2FnZSBBIGNodW5rIG9mIGJpbmFyeSBtZXNzYWdlc1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXJzZUNodW5rTWVzc2FnZShjaHVua01lc3NhZ2U6IFVpbnQ4QXJyYXkpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoe1xuICAgICAgICByZWFkaW5nOiB7IGJ1ZmZlcjogY2h1bmtNZXNzYWdlLCBjdXJyZW50T2Zmc2V0OiAwIH1cbiAgICAgIH0pXG5cbiAgICAgIHdoaWxlIChXaXJlTWVzc2FnZS52YWxpZGF0ZShidWZmZXIpKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGJ1ZmZlci5jdXJyZW50UmVhZE9mZnNldCgpXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLnJlYWQoYnVmZmVyKSFcblxuICAgICAgICBjb25zdCB7IHR5cGUsIGVudGl0eSwgY29tcG9uZW50SWQsIGRhdGEsIHRpbWVzdGFtcCB9ID0gbWVzc2FnZVxuICAgICAgICByZWNlaXZlZE1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICAgIHRyYW5zcG9ydFR5cGUsXG4gICAgICAgICAgbWVzc2FnZUJ1ZmZlcjogYnVmZmVyXG4gICAgICAgICAgICAuYnVmZmVyKClcbiAgICAgICAgICAgIC5zdWJhcnJheShvZmZzZXQsIGJ1ZmZlci5jdXJyZW50UmVhZE9mZnNldCgpKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW5kIGNsZWFyIHRoZSBtZXNzYWVzIHF1ZXVlXG4gICAqIEByZXR1cm5zIG1lc3NhZ2VzIHJlY2lldmVkIGJ5IHRoZSB0cmFuc3BvcnQgdG8gcHJvY2VzcyBvbiB0aGUgbmV4dCB0aWNrXG4gICAqL1xuICBmdW5jdGlvbiBnZXRNZXNzYWdlczxUID0gdW5rbm93bj4odmFsdWU6IFRbXSkge1xuICAgIGNvbnN0IG1lc3NhZ2VzVG9Qcm9jZXNzID0gQXJyYXkuZnJvbSh2YWx1ZSlcbiAgICB2YWx1ZS5sZW5ndGggPSAwXG4gICAgcmV0dXJuIG1lc3NhZ2VzVG9Qcm9jZXNzXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmbiB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSB0aWNrLlxuICAgKiBQcm9jZXNzIGFsbCB0aGUgbWVzc2FnZXMgcXVldWUgcmVjZWl2ZWQgYnkgdGhlIHRyYW5zcG9ydFxuICAgKi9cbiAgZnVuY3Rpb24gcmVjZWl2ZU1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VzVG9Qcm9jZXNzID0gZ2V0TWVzc2FnZXMocmVjZWl2ZWRNZXNzYWdlcylcbiAgICBmb3IgKGNvbnN0IHRyYW5zcG9ydCBvZiB0cmFuc3BvcnRzKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBtZXNzYWdlc1RvUHJvY2Vzcykge1xuICAgICAgICBjb25zdCB7IGRhdGEsIHRpbWVzdGFtcCwgY29tcG9uZW50SWQsIGVudGl0eSwgdHlwZSB9ID0gbWVzc2FnZVxuICAgICAgICBjb25zdCBjcmR0TWVzc2FnZTogQ3JkdE1lc3NhZ2U8VWludDhBcnJheT4gPSB7XG4gICAgICAgICAga2V5MTogZW50aXR5LFxuICAgICAgICAgIGtleTI6IGNvbXBvbmVudElkLFxuICAgICAgICAgIGRhdGE6IGRhdGEgfHwgbnVsbCxcbiAgICAgICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGVuZ2luZS5nZXRDb21wb25lbnQoY29tcG9uZW50SWQpXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjcmR0Q2xpZW50LnByb2Nlc3NNZXNzYWdlKGNyZHRNZXNzYWdlKVxuXG4gICAgICAgIC8vIENSRFQgb3V0ZGF0ZWQgbWVzc2FnZS4gUmVzZW5kIHRoaXMgbWVzc2FnZSB0aHJvdWdoIHRoZSB3aXJlXG4gICAgICAgIGlmIChjcmR0TWVzc2FnZSAhPT0gY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICAgID8gV2lyZU1lc3NhZ2UuRW51bS5QVVRfQ09NUE9ORU5UXG4gICAgICAgICAgICA6IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVFxuICAgICAgICAgIE1lc3NhZ2Uud3JpdGUodHlwZSwgZW50aXR5LCBjdXJyZW50LnRpbWVzdGFtcCwgY29tcG9uZW50LCBidWZmZXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUHJvY2VzcyBDUkRUIE1lc3NhZ2VcbiAgICAgICAgICBpZiAodHlwZSA9PT0gV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAgIHJlYWRpbmc6IHsgYnVmZmVyOiBtZXNzYWdlLmRhdGEhLCBjdXJyZW50T2Zmc2V0OiAwIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJiID0gY3JlYXRlQnl0ZUJ1ZmZlcihvcHRzKVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZW5naW5lIGNvbXBvbmVudFxuICAgICAgICAgICAgY29tcG9uZW50LnVwc2VydEZyb21CaW5hcnkobWVzc2FnZS5lbnRpdHksIGJiKVxuICAgICAgICAgICAgY29tcG9uZW50LmNsZWFyRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBBZGQgbWVzc2FnZSB0byB0cmFuc3BvcnQgcXVldWUgdG8gYmUgcHJvY2Vzc2VkIGJ5IG90aGVycyB0cmFuc3BvcnRzXG4gICAgICAgICAgdHJhbnNwb3J0TWVzc2FnZXMucHVzaChtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChidWZmZXIuc2l6ZSgpKSB7XG4gICAgICAgIHRyYW5zcG9ydC5zZW5kKGJ1ZmZlci50b0JpbmFyeSgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyB0aGUgZGlydHkgbWFwIGFuZCBnZW5lcmF0ZXMgY3JkdCBtZXNzYWdlcyB0byBiZSBzZW5kXG4gICAqIEBwYXJhbSBkaXJ0eU1hcCBhIG1hcCBvZiB7IGVudGl0aWVzOiBbY29tcG9uZW50SWRdIH1cbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lc3NhZ2VzKGRpcnR5TWFwOiBNYXA8RW50aXR5LCBTZXQ8bnVtYmVyPj4pIHtcbiAgICAvLyBDUkRUIE1lc3NhZ2VzIHdpbGwgYmUgdGhlIG1lcmdlIGJldHdlZW4gdGhlIHJlY2lldmVkIHRyYW5zcG9ydCBtZXNzYWdlcyBhbmQgdGhlIG5ldyBjcmR0IG1lc3NhZ2VzXG4gICAgY29uc3QgY3JkdE1lc3NhZ2VzID0gZ2V0TWVzc2FnZXModHJhbnNwb3J0TWVzc2FnZXMpXG4gICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG5cbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIGNvbXBvbmVudHNJZF0gb2YgZGlydHlNYXApIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50SWQgb2YgY29tcG9uZW50c0lkKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGVuZ2luZS5nZXRDb21wb25lbnQoY29tcG9uZW50SWQpXG4gICAgICAgIGNvbnN0IGVudGl0eUNvbXBvbmVudCA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgID8gY29tcG9uZW50LnRvQmluYXJ5KGVudGl0eSkudG9CaW5hcnkoKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBjb25zdCBldmVudCA9IGNyZHRDbGllbnQuY3JlYXRlRXZlbnQoXG4gICAgICAgICAgZW50aXR5LFxuICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgIGVudGl0eUNvbXBvbmVudFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGJ1ZmZlci5jdXJyZW50V3JpdGVPZmZzZXQoKVxuICAgICAgICBjb25zdCB0eXBlID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgPyBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlRcbiAgICAgICAgICA6IFdpcmVNZXNzYWdlLkVudW0uREVMRVRFX0NPTVBPTkVOVFxuICAgICAgICBjb25zdCB0cmFuc3BvcnRNZXNzYWdlOiBPbWl0PFRyYW5zcG9ydE1lc3NhZ2UsICdtZXNzYWdlQnVmZmVyJz4gPSB7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBjb21wb25lbnRJZCxcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXBcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhbnNwb3J0cy5zb21lKCh0KSA9PiB0LmZpbHRlcih0cmFuc3BvcnRNZXNzYWdlKSkpIHtcbiAgICAgICAgICBNZXNzYWdlLndyaXRlKHR5cGUsIGVudGl0eSwgZXZlbnQudGltZXN0YW1wLCBjb21wb25lbnQsIGJ1ZmZlcilcbiAgICAgICAgICBjcmR0TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAuLi50cmFuc3BvcnRNZXNzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZUJ1ZmZlcjogYnVmZmVyXG4gICAgICAgICAgICAgIC5idWZmZXIoKVxuICAgICAgICAgICAgICAuc3ViYXJyYXkob2Zmc2V0LCBidWZmZXIuY3VycmVudFdyaXRlT2Zmc2V0KCkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlbmQgbWVzc2FnZXMgdG8gdHJhbnNwb3J0c1xuICAgIGNvbnN0IHRyYW5zcG9ydEJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgIGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHtcbiAgICAgIHRyYW5zcG9ydEJ1ZmZlci5yZXNldEJ1ZmZlcigpXG4gICAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgY3JkdE1lc3NhZ2VzKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnQuZmlsdGVyKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgdHJhbnNwb3J0QnVmZmVyLndyaXRlQnVmZmVyKG1lc3NhZ2UubWVzc2FnZUJ1ZmZlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0cmFuc3BvcnRCdWZmZXIuc2l6ZSgpKSB7XG4gICAgICAgIHRyYW5zcG9ydC5zZW5kKHRyYW5zcG9ydEJ1ZmZlci50b0JpbmFyeSgpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlTWVzc2FnZXMsXG4gICAgcmVjZWl2ZU1lc3NhZ2VzXG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL2NvbXBvbmVudCdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seU1hcDxLLCBWPiA9IFJlYWRvbmx5TWFwPFxuICBEZWVwUmVhZG9ubHk8Sz4sXG4gIERlZXBSZWFkb25seTxWPlxuPlxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seVNldDxUPiA9IFJlYWRvbmx5U2V0PERlZXBSZWFkb25seTxUPj5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHlPYmplY3Q8VD4gPSB7XG4gIHJlYWRvbmx5IFtLIGluIGtleW9mIFRdOiBEZWVwUmVhZG9ubHk8VFtLXT5cbn1cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZWFkb25seVByaW1pdGl2ZSA9XG4gIHwgbnVtYmVyXG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyW11cbiAgfCBzdHJpbmdbXVxuICB8IGJvb2xlYW5cbiAgfCBib29sZWFuW11cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5Q29tcG9uZW50U2NoZW1hPFxuICBUIGV4dGVuZHMgW0NvbXBvbmVudERlZmluaXRpb24sIC4uLkNvbXBvbmVudERlZmluaXRpb25bXV1cbj4gPSB7XG4gIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQ29tcG9uZW50RGVmaW5pdGlvblxuICAgID8gUmV0dXJuVHlwZTxUW0tdWydnZXQnXT5cbiAgICA6IG5ldmVyXG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZWVwUmVhZG9ubHk8VD4gPSBUIGV4dGVuZHMgUmVhZG9ubHlQcmltaXRpdmVcbiAgPyBUXG4gIDogVCBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPlxuICA/IERlZXBSZWFkb25seU1hcDxLLCBWPlxuICA6IFQgZXh0ZW5kcyBTZXQ8aW5mZXIgTT5cbiAgPyBEZWVwUmVhZG9ubHlTZXQ8TT5cbiAgOiBEZWVwUmVhZG9ubHlPYmplY3Q8VD5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBSZWFkb25seTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICB2YWw6IFRcbik6IERlZXBSZWFkb25seTxUPiB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4udmFsIH0pIGFzIERlZXBSZWFkb25seTxUPlxufVxuIiwiaW1wb3J0IHR5cGUgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciwgY3JlYXRlQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5J1xuaW1wb3J0IHsgZGVlcFJlYWRvbmx5LCBEZWVwUmVhZG9ubHkgfSBmcm9tICcuL3JlYWRvbmx5J1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRWNzUmVzdWx0PFQgZXh0ZW5kcyBJU2NoZW1hPiA9IFQgZXh0ZW5kcyBJU2NoZW1hXG4gID8gUmV0dXJuVHlwZTxUWydkZXNlcmlhbGl6ZSddPlxuICA6IG5ldmVyXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnRUeXBlPFQgZXh0ZW5kcyBJU2NoZW1hPiA9IEVjc1Jlc3VsdDxUPlxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50RGVmaW5pdGlvbjxcbiAgVCBleHRlbmRzIElTY2hlbWEgPSBJU2NoZW1hPGFueT4sXG4gIENvbnN0cnVjdG9yVHlwZSA9IENvbXBvbmVudFR5cGU8VD5cbj4gPSB7XG4gIF9pZDogbnVtYmVyXG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb21wb25lbnRcbiAgICovXG4gIGRlZmF1bHQoKTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+XG5cbiAgLyoqXG4gICAqIEdldCBpZiB0aGUgZW50aXR5IGhhcyB0aGlzIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5oYXMobXlFbnRpdHkpIC8vIHJldHVybiBmYWxzZVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBUcmFuc2Zvcm0uaGFzKG15RW50aXR5KSAvLyByZXR1cm4gdHJ1ZVxuICAgKiBgYGBcbiAgICovXG4gIGhhcyhlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW5cblxuICAvKipcbiAgICogR2V0IHRoZSByZWFkb25seSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSAodG8gbXV0YXRlIGl0LCB1c2UgZ2V0TXV0YWJsZSBpbnN0ZWFkKSwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcmV0dXJuXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQobXlFbnRpdHkpIC8vIHJldHVybiB0cnVlXG4gICAqIGxvZyh0cmFuc2Zvcm0ucG9zaXRpb24ueCA9PT0gMCkgLy8gbG9nICd0cnVlJ1xuICAgKlxuICAgKiB0cmFuc2Zvcm0ucG9zaXRpb24ueSA9IDEwIC8vIGlsbGVnYWwgc3RhdGVtZW50LCB0byBtdXRhdGUgdGhlIGNvbXBvbmVudCB1c2UgZ2V0TXV0YWJsZVxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgdHNcbiAgICogY29uc3Qgb3RoZXJFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmdldChvdGhlckVudGl0eSkgLy8gdGhyb3cgYW4gZXJyb3IhIVxuICAgKiBgYGBcbiAgICovXG4gIGdldChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PlxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlYWRvbmx5IGNvbXBvbmVudCBvZiB0aGUgZW50aXR5ICh0byBtdXRhdGUgaXQsIHVzZSBnZXRNdXRhYmxlIGluc3RlYWQpLCBvciBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHJldHVyblxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBvdGhlckVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBsb2coVHJhbnNmb3JtLmdldChvdGhlckVudGl0eSkgPT09IG51bGwpIC8vIGxvZyAndHJ1ZSdcbiAgICogYGBgXG4gICAqL1xuICBnZXRPck51bGwoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4gfCBudWxsXG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgY3VycmVudCBjb21wb25lbnQgdG8gYW4gZW50aXR5LCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgY29tcG9uZW50IGFscmVhZHkgZXhpc3RzICh1c2UgYGNyZWF0ZU9yUmVwbGFjZWAgaW5zdGVhZCkuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gdmFsIFRoZSBpbml0aWFsIHZhbHVlXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHksIHsgLi4uVHJhbnNmb3JtLmRlZmF1bHQoKSwgcG9zaXRpb246IHt4OiA0LCB5OiAwLCB6OiA0fSB9KSAvLyBvayFcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSkgLy8gdGhyb3cgYW4gZXJyb3IsIHRoZSBgVHJhbnNmb3JtYCBjb21wb25lbnQgYWxyZWFkeSBleGlzdHMgaW4gYG15RW50aXR5YFxuICAgKiBgYGBgXG4gICAqL1xuICBjcmVhdGUoZW50aXR5OiBFbnRpdHksIHZhbD86IENvbnN0cnVjdG9yVHlwZSk6IENvbXBvbmVudFR5cGU8VD5cbiAgLyoqXG4gICAqIEFkZCB0aGUgY3VycmVudCBjb21wb25lbnQgdG8gYW4gZW50aXR5IG9yIHJlcGxhY2UgdGhlIGNvbnRlbnQgaWYgdGhlIGVudGl0eSBhbHJlYWR5IGhhcyB0aGUgY29tcG9uZW50XG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcGFyYW0gdmFsIFRoZSBpbml0aWFsIG9yIG5ldyB2YWx1ZVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KSAvLyBvayFcbiAgICogVHJhbnNmb3JtLmNyZWF0ZU9yUmVwbGFjZShteUVudGl0eSwgeyAuLi5UcmFuc2Zvcm0uZGVmYXVsdCgpLCBwb3NpdGlvbjoge3g6IDQsIHk6IDAsIHo6IDR9IH0pIC8vIG9rIVxuICAgKiBgYGBgXG4gICAqL1xuICBjcmVhdGVPclJlcGxhY2UoZW50aXR5OiBFbnRpdHksIHZhbD86IENvbXBvbmVudFR5cGU8VD4pOiBDb21wb25lbnRUeXBlPFQ+XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgY3VycmVudCBjb21wb25lbnQgdG8gYW4gZW50aXR5LCByZXR1cm4gbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY3VycmVudCBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KSAvLyBvayFcbiAgICogVHJhbnNmb3JtLmRlbGV0ZUZyb20obXlFbnRpdHkpIC8vIHJldHVybiB0aGUgY29tcG9uZW50XG4gICAqIFRyYW5zZm9ybS5kZWxldGVGcm9tKG15RW50aXR5KSAvLyByZXR1cm4gbnVsbFxuICAgKiBgYGBgXG4gICAqL1xuICBkZWxldGVGcm9tKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcblxuICAvKipcbiAgICogR2V0IHRoZSBtdXRhYmxlIGNvbXBvbmVudCBvZiB0aGUgZW50aXR5LCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogVHJhbnNmb3JtLmdldE11dGFibGUobXlFbnRpdHkpLnBvc2l0aW9uID0ge3g6IDQsIHk6IDAsIHo6IDR9XG4gICAqIGBgYGBcbiAgICovXG4gIGdldE11dGFibGUoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbXV0YWJsZSBjb21wb25lbnQgb2YgdGhlIGVudGl0eSwgcmV0dXJuIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRNdXRhYmxlT3JOdWxsKG15RW50aXR5KVxuICAgKiBpZiAodHJhbnNmb3JtKSB7XG4gICAqICAgdHJhbnNmb3JtLnBvc2l0aW9uID0ge3g6IDQsIHk6IDAsIHo6IDR9XG4gICAqIH1cbiAgICogYGBgYFxuICAgKi9cbiAgZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsXG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICB1cHNlcnRGcm9tQmluYXJ5KGVudGl0eTogRW50aXR5LCBkYXRhOiBCeXRlQnVmZmVyKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICB1cGRhdGVGcm9tQmluYXJ5KGVudGl0eTogRW50aXR5LCBkYXRhOiBCeXRlQnVmZmVyKTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcblxuICAvLyBhbGxvY2F0ZXMgYSBidWZmZXIgYW5kIHJldHVybnMgbmV3IGJ1ZmZlclxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICovXG4gIHRvQmluYXJ5KGVudGl0eTogRW50aXR5KTogQnl0ZUJ1ZmZlclxuXG4gIC8vIHdyaXRlcyB0byBhIHByZS1hbGxvY2F0ZWQgYnVmZmVyXG4gIHdyaXRlVG9CeXRlQnVmZmVyKGVudGl0eTogRW50aXR5LCBidWZmZXI6IEJ5dGVCdWZmZXIpOiB2b2lkXG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBVc2UgZW5naW5lLmdldEVudGl0aWVzV2l0aChDb21wb25lbnQpIGluc3RlYWQuXG4gICAqIEdldCB0aGUgaXRlcmF0b3IgdG8gZXZlcnkgZW50aXR5IGhhcyB0aGUgY29tcG9uZW50XG4gICAqL1xuICBpdGVyYXRvcigpOiBJdGVyYWJsZTxbRW50aXR5LCBDb21wb25lbnRUeXBlPFQ+XT5cblxuICAvLyBEaXJ0eVxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBkaXJ0eUl0ZXJhdG9yKCk6IEl0ZXJhYmxlPEVudGl0eT5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY2xlYXJEaXJ0eSgpOiB2b2lkXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGlzRGlydHkoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb21wb25lbnQ8XG4gIFQgZXh0ZW5kcyBJU2NoZW1hLFxuICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4+KFxuICBjb21wb25lbnRJZDogbnVtYmVyLFxuICBzcGVjOiBULFxuICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgLy8gbWV0YTogeyBzeW5jRmxhZ3MgfVxuKTogQ29tcG9uZW50RGVmaW5pdGlvbjxULCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgY29uc3QgZGF0YSA9IG5ldyBNYXA8RW50aXR5LCBDb21wb25lbnRUeXBlPFQ+PigpXG4gIGNvbnN0IGRpcnR5SXRlcmF0b3IgPSBuZXcgU2V0PEVudGl0eT4oKVxuXG4gIGNvbnN0IGRlZmF1bHRCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgaWYgKGNvbnN0cnVjdG9yRGVmYXVsdCkge1xuICAgIHNwZWMuc2VyaWFsaXplKGNvbnN0cnVjdG9yRGVmYXVsdCwgZGVmYXVsdEJ1ZmZlcilcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAoY29uc3RydWN0b3JEZWZhdWx0KSB7XG4gICAgICByZXR1cm4gc3BlYy5kZXNlcmlhbGl6ZShcbiAgICAgICAgY3JlYXRlQnl0ZUJ1ZmZlcih7XG4gICAgICAgICAgd3JpdGluZzoge1xuICAgICAgICAgICAgYnVmZmVyOiBkZWZhdWx0QnVmZmVyLmJ1ZmZlcigpLFxuICAgICAgICAgICAgY3VycmVudE9mZnNldDogZGVmYXVsdEJ1ZmZlci5jdXJyZW50V3JpdGVPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNwZWMuY3JlYXRlKClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcmVmaWxsVmFsdWUodmFsdWU6IENvbnN0cnVjdG9yVHlwZSkge1xuICAgIHJldHVybiB7IC4uLmdldERlZmF1bHRWYWx1ZSgpLCAuLi52YWx1ZSB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIF9pZDogY29tcG9uZW50SWQsXG4gICAgZGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldERlZmF1bHRWYWx1ZSgpXG4gICAgfSxcbiAgICBpc0RpcnR5OiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBkaXJ0eUl0ZXJhdG9yLmhhcyhlbnRpdHkpXG4gICAgfSxcbiAgICBoYXM6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGRhdGEuaGFzKGVudGl0eSlcbiAgICB9LFxuICAgIGRlbGV0ZUZyb206IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGRhdGEuZGVsZXRlKGVudGl0eSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgZ2V0T3JOdWxsOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eVxuICAgICk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudCA/IGRlZXBSZWFkb25seShjb21wb25lbnQpIDogbnVsbFxuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbZ2V0RnJvbV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGVlcFJlYWRvbmx5KGNvbXBvbmVudClcbiAgICB9LFxuICAgIGNyZWF0ZTogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICB2YWx1ZT86IENvbnN0cnVjdG9yVHlwZVxuICAgICk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtjcmVhdGVdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IGFscmVhZHkgZXhpc3RzYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjb25zdCB1c2VkVmFsdWUgPVxuICAgICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZ2V0RGVmYXVsdFZhbHVlKCkgOiBwcmVmaWxsVmFsdWUodmFsdWUpXG4gICAgICBkYXRhLnNldChlbnRpdHksIHVzZWRWYWx1ZSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiB1c2VkVmFsdWVcbiAgICB9LFxuICAgIGNyZWF0ZU9yUmVwbGFjZTogZnVuY3Rpb24gKFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICB2YWx1ZT86IENvbnN0cnVjdG9yVHlwZVxuICAgICk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgdXNlZFZhbHVlID1cbiAgICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGdldERlZmF1bHRWYWx1ZSgpIDogcHJlZmlsbFZhbHVlKHZhbHVlKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCB1c2VkVmFsdWUhKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIHVzZWRWYWx1ZSFcbiAgICB9LFxuICAgIGdldE11dGFibGVPck51bGw6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgfSxcbiAgICBnZXRNdXRhYmxlOiBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gICAgICBpZiAoY29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW211dGFibGVdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbXBvbmVudFxuICAgIH0sXG4gICAgaXRlcmF0b3I6IGZ1bmN0aW9uKiAoKTogSXRlcmFibGU8W0VudGl0eSwgQ29tcG9uZW50VHlwZTxUPl0+IHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eSwgY29tcG9uZW50XSBvZiBkYXRhKSB7XG4gICAgICAgIHlpZWxkIFtlbnRpdHksIGNvbXBvbmVudF1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRpcnR5SXRlcmF0b3I6IGZ1bmN0aW9uKiAoKTogSXRlcmFibGU8RW50aXR5PiB7XG4gICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBkaXJ0eUl0ZXJhdG9yKSB7XG4gICAgICAgIHlpZWxkIGVudGl0eVxuICAgICAgfVxuICAgIH0sXG4gICAgdG9CaW5hcnkoZW50aXR5OiBFbnRpdHkpOiBCeXRlQnVmZmVyIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3RvQmluYXJ5XSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd3JpdGVCdWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcbiAgICAgIHNwZWMuc2VyaWFsaXplKGNvbXBvbmVudCwgd3JpdGVCdWZmZXIpXG4gICAgICByZXR1cm4gd3JpdGVCdWZmZXJcbiAgICB9LFxuICAgIHdyaXRlVG9CeXRlQnVmZmVyKGVudGl0eTogRW50aXR5LCBidWZmZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3dyaXRlVG9CeXRlQnVmZmVyXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgc3BlYy5zZXJpYWxpemUoY29tcG9uZW50LCBidWZmZXIpXG4gICAgfSxcbiAgICB1cGRhdGVGcm9tQmluYXJ5KFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICBidWZmZXI6IEJ5dGVCdWZmZXJcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFt1cGRhdGVGcm9tQmluYXJ5XSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnVwc2VydEZyb21CaW5hcnkoZW50aXR5LCBidWZmZXIpXG4gICAgfSxcbiAgICB1cHNlcnRGcm9tQmluYXJ5KFxuICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICBidWZmZXI6IEJ5dGVCdWZmZXJcbiAgICApOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbCB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHNwZWMuZGVzZXJpYWxpemUoYnVmZmVyKVxuICAgICAgZGF0YS5zZXQoZW50aXR5LCBuZXdWYWx1ZSlcbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBuZXdWYWx1ZVxuICAgIH0sXG4gICAgY2xlYXJEaXJ0eTogZnVuY3Rpb24gKCkge1xuICAgICAgZGlydHlJdGVyYXRvci5jbGVhcigpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eSdcblxuZXhwb3J0IG5hbWVzcGFjZSBFbnRpdHlVdGlscyB7XG4gIC8qKlxuICAgKiBSYW5nZSBpcyB0aGUgZmlyc3QgZWxlbWVudCBhbmQgdGhlIGxhc3QgcG9zc2libGUgZWxlbWVudCwgdGhleSBib3RoIGFyZSBpbmNsdWRlZCBpbiB0aGUgaW50ZXJ2YWwuXG4gICAqIFtzdGFydCwgZW5kXVxuICAgKi9cbiAgZXhwb3J0IHR5cGUgRW50aXR5UmFuZ2UgPSByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdXG5cbiAgZXhwb3J0IGNvbnN0IE1BWF9FTlRJVElFUyA9IDB4ZmZmZmZmZmZcbiAgZXhwb3J0IGNvbnN0IERZTkFNSUNfRU5USVRJRVNfU1RBUlRfQVQgPSAxMDBlM1xuICBleHBvcnQgY29uc3QgUkVTRVJWRURfU1RBVElDX0VOVElUSUVTID0gNTEyXG5cbiAgZXhwb3J0IGNvbnN0IFJFU0VSVkVEX0VOVElUSUVTX1JBTkdFOiBFbnRpdHlSYW5nZSA9IFtcbiAgICAwLFxuICAgIFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyAtIDFcbiAgXVxuXG4gIGV4cG9ydCBjb25zdCBTVEFUSUNfRU5USVRJRVNfUkFOR0U6IEVudGl0eVJhbmdlID0gW1xuICAgIFJFU0VSVkVEX1NUQVRJQ19FTlRJVElFUyxcbiAgICBEWU5BTUlDX0VOVElUSUVTX1NUQVJUX0FUIC0gMVxuICBdXG5cbiAgZXhwb3J0IGNvbnN0IERZTkFNSUNfRU5USVRJRVNfUkFOR0U6IEVudGl0eVJhbmdlID0gW1xuICAgIERZTkFNSUNfRU5USVRJRVNfU1RBUlRfQVQsXG4gICAgTUFYX0VOVElUSUVTXG4gIF1cblxuICBmdW5jdGlvbiBpc0luUmFuZ2UoZW50aXR5OiBFbnRpdHksIHJhbmdlOiBFbnRpdHlSYW5nZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlbnRpdHkgPj0gcmFuZ2VbMF0gJiYgZW50aXR5IDw9IHJhbmdlWzFdXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNEeW5hbWljRW50aXR5KGVudGl0eTogRW50aXR5KSB7XG4gICAgcmV0dXJuIGlzSW5SYW5nZShlbnRpdHksIERZTkFNSUNfRU5USVRJRVNfUkFOR0UpXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNTdGF0aWNFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICByZXR1cm4gaXNJblJhbmdlKGVudGl0eSwgU1RBVElDX0VOVElUSUVTX1JBTkdFKVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUmVzZXJ2ZWRFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICByZXR1cm4gaXNJblJhbmdlKGVudGl0eSwgUkVTRVJWRURfRU5USVRJRVNfUkFOR0UpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW50aXR5VXRpbHNcbiIsImltcG9ydCB7IEVudGl0eVV0aWxzIH0gZnJvbSAnLi9lbnRpdHktdXRpbHMnXG5cbmRlY2xhcmUgY29uc3QgZW50aXR5U3ltYm9sOiB1bmlxdWUgc3ltYm9sXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5ID0gbnVtYmVyICYgeyBbZW50aXR5U3ltYm9sXTogdHJ1ZSB9XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlDb250YWluZXIoKSB7XG4gIGNvbnN0IHN0YXRpY0VudGl0eSA9IEVudGl0eShFbnRpdHlVdGlscy5TVEFUSUNfRU5USVRJRVNfUkFOR0UpXG4gIGNvbnN0IGR5bmFtaWNFbnRpdHkgPSBFbnRpdHkoRW50aXR5VXRpbHMuRFlOQU1JQ19FTlRJVElFU19SQU5HRSlcbiAgcmV0dXJuIHtcbiAgICBnZW5lcmF0ZUVudGl0eShkeW5hbWljOiBib29sZWFuID0gZmFsc2UpOiBFbnRpdHkge1xuICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNFbnRpdHkuZ2VuZXJhdGVFbnRpdHkoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0YXRpY0VudGl0eS5nZW5lcmF0ZUVudGl0eSgpXG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHN0YXRpY0VudGl0eS5yZW1vdmVFbnRpdHkoZW50aXR5KSB8fCBkeW5hbWljRW50aXR5LnJlbW92ZUVudGl0eShlbnRpdHkpXG4gICAgICApXG4gICAgfSxcbiAgICBpc0VudGl0eUV4aXN0cyhlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgRW50aXR5VXRpbHMuaXNSZXNlcnZlZEVudGl0eShlbnRpdHkpIHx8XG4gICAgICAgIHN0YXRpY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKCkuaGFzKGVudGl0eSkgfHxcbiAgICAgICAgZHluYW1pY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKCkuaGFzKGVudGl0eSlcbiAgICAgIClcbiAgICB9LFxuICAgIGdldEV4aXN0aW5nRW50aXRpZXMoKTogU2V0PEVudGl0eT4ge1xuICAgICAgcmV0dXJuIG5ldyBTZXQoW1xuICAgICAgICAuLi5zdGF0aWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpLFxuICAgICAgICAuLi5keW5hbWljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKVxuICAgICAgXSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gRW50aXR5KHJhbmdlOiBFbnRpdHlVdGlscy5FbnRpdHlSYW5nZSkge1xuICBmdW5jdGlvbiBjcmVhdGVFbnRpdHkoZW50aXR5OiBudW1iZXIpOiBFbnRpdHkge1xuICAgIHJldHVybiBlbnRpdHkgYXMgRW50aXR5XG4gIH1cblxuICBsZXQgZW50aXR5Q291bnRlciA9IHJhbmdlWzBdXG4gIGNvbnN0IHVzZWRFbnRpdGllczogU2V0PEVudGl0eT4gPSBuZXcgU2V0KClcblxuICBmdW5jdGlvbiBnZW5lcmF0ZUVudGl0eSgpOiBFbnRpdHkge1xuICAgIGlmIChlbnRpdHlDb3VudGVyID49IHJhbmdlWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJdCBmYWlscyB0cnlpbmcgdG8gZ2VuZXJhdGUgYW4gZW50aXR5IG91dCBvZiByYW5nZSBbJHtyYW5nZVswXX0sICR7cmFuZ2VbMV19XS5gXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gY3JlYXRlRW50aXR5KGVudGl0eUNvdW50ZXIpXG4gICAgZW50aXR5Q291bnRlcisrXG5cbiAgICB1c2VkRW50aXRpZXMuYWRkKGVudGl0eSlcbiAgICByZXR1cm4gZW50aXR5XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICByZXR1cm4gdXNlZEVudGl0aWVzLmRlbGV0ZShlbnRpdHkpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldEV4aXN0aW5nRW50aXRpZXMoKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh1c2VkRW50aXRpZXMpXG4gICAgfSxcbiAgICBnZW5lcmF0ZUVudGl0eSxcbiAgICByZW1vdmVFbnRpdHlcbiAgfVxufVxuIiwiLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFN5c3RlbUZuID0gKGR0OiBudW1iZXIpID0+IHZvaWRcblxuZXhwb3J0IGNvbnN0IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSA9IDEwMGUzXG5cbnR5cGUgU3lzdGVtID0ge1xuICBmbjogU3lzdGVtRm5cbiAgcHJpb3JpdHk6IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTeXN0ZW1Db250YWluZXIoKSB7XG4gIGNvbnN0IHN5c3RlbXM6IFN5c3RlbVtdID0gW11cblxuICBmdW5jdGlvbiBzb3J0KCkge1xuICAgIHN5c3RlbXMuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBhZGQoZm46IFN5c3RlbUZuLCBwcmlvcml0eTogbnVtYmVyLCBuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5mbiA9PT0gZm4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBhbHJlYWR5IGFkZGVkJylcbiAgICB9IGVsc2UgaWYgKG5hbWUgJiYgc3lzdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbSBuYW1lIGFscmVhZHkgdXNlZCcpXG4gICAgfVxuXG4gICAgc3lzdGVtcy5wdXNoKHtcbiAgICAgIGZuLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBuYW1lXG4gICAgfSlcbiAgICBzb3J0KClcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShzZWxlY3Rvcjogc3RyaW5nIHwgU3lzdGVtRm4pIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGluZGV4ID0gc3lzdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gc3lzdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZm4gPT09IHNlbGVjdG9yKVxuICAgIH1cblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHN5c3RlbXMuc3BsaWNlKGluZGV4LCAxKVxuICAgIHNvcnQoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFkZCxcbiAgICByZW1vdmUsXG4gICAgZ2V0U3lzdGVtcygpIHtcbiAgICAgIHJldHVybiBzeXN0ZW1zXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBkZWZpbmVTZGtDb21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cydcbmltcG9ydCB7IFNjaGVtYXMgfSBmcm9tICcuLi9zY2hlbWFzJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IFJlc3VsdCwgU3BlYyB9IGZyb20gJy4uL3NjaGVtYXMvTWFwJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IGNyZHRTY2VuZVN5c3RlbSB9IGZyb20gJy4uL3N5c3RlbXMvY3JkdCdcbmltcG9ydCB7XG4gIENvbXBvbmVudERlZmluaXRpb24sXG4gIENvbXBvbmVudFR5cGUsXG4gIGRlZmluZUNvbXBvbmVudCBhcyBkZWZDb21wb25lbnRcbn0gZnJvbSAnLi9jb21wb25lbnQnXG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eUNvbnRhaW5lciB9IGZyb20gJy4vZW50aXR5J1xuaW1wb3J0IHsgU3lzdGVtQ29udGFpbmVyLCBTWVNURU1TX1JFR1VMQVJfUFJJT1JJVFksIFN5c3RlbUZuIH0gZnJvbSAnLi9zeXN0ZW1zJ1xuaW1wb3J0IHR5cGUgeyBJRW5naW5lUGFyYW1zLCBJRW5naW5lIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IFJlYWRvbmx5Q29tcG9uZW50U2NoZW1hIH0gZnJvbSAnLi9yZWFkb25seSdcblxuZXhwb3J0ICogZnJvbSAnLi9yZWFkb25seSdcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnXG5leHBvcnQgeyBDb21wb25lbnRUeXBlLCBFbnRpdHksIEJ5dGVCdWZmZXIsIENvbXBvbmVudERlZmluaXRpb24gfVxuXG5mdW5jdGlvbiBwcmVFbmdpbmUoKSB7XG4gIGNvbnN0IGVudGl0eUNvbnRhaW5lciA9IEVudGl0eUNvbnRhaW5lcigpXG4gIGNvbnN0IGNvbXBvbmVudHNEZWZpbml0aW9uID0gbmV3IE1hcDxudW1iZXIsIENvbXBvbmVudERlZmluaXRpb248YW55Pj4oKVxuICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIG1ha2UgdGhpcyB3b3JrLlxuICAvLyBNYXliZSBhIHByb3h5L2NhbGxiYWNrIHRvIGJlIHVwLXRvLWRhdGVcbiAgY29uc3QgZW50aXRpZXNDb21wb25lbnQgPSBuZXcgTWFwPFxuICAgIG51bWJlcixcbiAgICBTZXQ8Q29tcG9uZW50RGVmaW5pdGlvbjxhbnk+WydfaWQnXT5cbiAgPigpXG4gIGNvbnN0IHN5c3RlbXMgPSBTeXN0ZW1Db250YWluZXIoKVxuXG4gIGZ1bmN0aW9uIGFkZFN5c3RlbShcbiAgICBmbjogU3lzdGVtRm4sXG4gICAgcHJpb3JpdHk6IG51bWJlciA9IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSxcbiAgICBuYW1lPzogc3RyaW5nXG4gICkge1xuICAgIHN5c3RlbXMuYWRkKGZuLCBwcmlvcml0eSwgbmFtZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVN5c3RlbShzZWxlY3Rvcjogc3RyaW5nIHwgU3lzdGVtRm4pIHtcbiAgICByZXR1cm4gc3lzdGVtcy5yZW1vdmUoc2VsZWN0b3IpXG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbnRpdHkoZHluYW1pYzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gZW50aXRpZXNDb21wbm9uZW50LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICBjb25zdCBlbnRpdHkgPSBlbnRpdHlDb250YWluZXIuZ2VuZXJhdGVFbnRpdHkoZHluYW1pYylcbiAgICByZXR1cm4gZW50aXR5XG4gIH1cblxuICBmdW5jdGlvbiBhZGREeW5hbWljRW50aXR5KCkge1xuICAgIHJldHVybiBhZGRFbnRpdHkodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIGZvciAoY29uc3QgWywgY29tcG9uZW50XSBvZiBjb21wb25lbnRzRGVmaW5pdGlvbikge1xuICAgICAgaWYgKGNvbXBvbmVudC5oYXMoZW50aXR5KSkge1xuICAgICAgICBjb21wb25lbnQuZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eUNvbnRhaW5lci5yZW1vdmVFbnRpdHkoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYTxcbiAgICBUIGV4dGVuZHMgSVNjaGVtYSxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBDb21wb25lbnRUeXBlPFQ+XG4gID4oXG4gICAgc3BlYzogVCxcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGNvbnN0cnVjdG9yRGVmYXVsdD86IENvbnN0cnVjdG9yVHlwZVxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQsIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIGlmIChjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCAke2NvbXBvbmVudElkfSBhbHJlYWR5IGRlY2xhcmVkYClcbiAgICB9XG4gICAgY29uc3QgbmV3Q29tcG9uZW50ID0gZGVmQ29tcG9uZW50PFQsIENvbnN0cnVjdG9yVHlwZT4oXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIHNwZWMsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uc2V0KGNvbXBvbmVudElkLCBuZXdDb21wb25lbnQpXG4gICAgcmV0dXJuIG5ld0NvbXBvbmVudFxuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lQ29tcG9uZW50PFxuICAgIFQgZXh0ZW5kcyBTcGVjLFxuICAgIENvbnN0cnVjdG9yVHlwZSA9IFBhcnRpYWw8UmVzdWx0PFQ+PlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxJU2NoZW1hPFJlc3VsdDxUPj4sIENvbnN0cnVjdG9yVHlwZT4ge1xuICAgIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFxuICAgICAgU2NoZW1hcy5NYXAoc3BlYyksXG4gICAgICBjb21wb25lbnRJZCxcbiAgICAgIGNvbnN0cnVjdG9yRGVmYXVsdFxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENvbXBvbmVudDxUIGV4dGVuZHMgSVNjaGVtYT4oXG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICApOiBDb21wb25lbnREZWZpbml0aW9uPFQ+IHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRzRGVmaW5pdGlvbi5nZXQoY29tcG9uZW50SWQpXG4gICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvbXBvbmVudCAke2NvbXBvbmVudElkfSBub3QgZm91bmQuIFlvdSBuZWVkIHRvIGRlY2xhcmUgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGJlZ2lubmlnIG9mIHRoZSBlbmdpbmUgZGVjbGFyYXRpb25gXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRFbnRpdGllc1dpdGg8XG4gICAgVCBleHRlbmRzIFtDb21wb25lbnREZWZpbml0aW9uLCAuLi5Db21wb25lbnREZWZpbml0aW9uW11dXG4gID4oLi4uY29tcG9uZW50czogVCk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlJlYWRvbmx5Q29tcG9uZW50U2NoZW1hPFQ+XT4ge1xuICAgIGZvciAoY29uc3QgW2VudGl0eSwgLi4uZ3JvdXBDb21wXSBvZiBnZXRDb21wb25lbnREZWZHcm91cCguLi5jb21wb25lbnRzKSkge1xuICAgICAgeWllbGQgW2VudGl0eSwgLi4uZ3JvdXBDb21wLm1hcCgoYykgPT4gYy5nZXQoZW50aXR5KSldIGFzIFtcbiAgICAgICAgRW50aXR5LFxuICAgICAgICAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPlxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uKiBnZXRDb21wb25lbnREZWZHcm91cDxUIGV4dGVuZHMgQ29tcG9uZW50RGVmaW5pdGlvbltdPihcbiAgICAuLi5hcmdzOiBUXG4gICk6IEl0ZXJhYmxlPFtFbnRpdHksIC4uLlRdPiB7XG4gICAgY29uc3QgW2ZpcnN0Q29tcG9uZW50RGVmLCAuLi5jb21wb25lbnREZWZpbml0aW9uc10gPSBhcmdzXG4gICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBmaXJzdENvbXBvbmVudERlZi5pdGVyYXRvcigpKSB7XG4gICAgICBsZXQgbWF0Y2hlcyA9IHRydWVcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIGNvbXBvbmVudERlZmluaXRpb25zKSB7XG4gICAgICAgIGlmICghY29tcG9uZW50RGVmLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICB5aWVsZCBbZW50aXR5LCAuLi5hcmdzXVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN5c3RlbXMoKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMuZ2V0U3lzdGVtcygpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDb21wb25lbnREZWZpbml0aW9uKGNvbXBvbmVudElkOiBudW1iZXIpIHtcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbi5kZWxldGUoY29tcG9uZW50SWQpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVudGl0aWVzQ29tcG9uZW50LFxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLFxuICAgIGFkZEVudGl0eSxcbiAgICBhZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW0sXG4gICAgZ2V0U3lzdGVtcyxcbiAgICByZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEsXG4gICAgZ2V0RW50aXRpZXNXaXRoLFxuICAgIGdldENvbXBvbmVudCxcbiAgICByZW1vdmVDb21wb25lbnREZWZpbml0aW9uXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFByZUVuZ2luZSA9IFJldHVyblR5cGU8dHlwZW9mIHByZUVuZ2luZT5cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbmdpbmUoeyB0cmFuc3BvcnRzIH06IElFbmdpbmVQYXJhbXMgPSB7fSk6IElFbmdpbmUge1xuICBjb25zdCBlbmdpbmUgPSBwcmVFbmdpbmUoKVxuICBjb25zdCBjcmR0U3lzdGVtID0gY3JkdFNjZW5lU3lzdGVtKHsgZW5naW5lLCB0cmFuc3BvcnRzOiB0cmFuc3BvcnRzIHx8IFtdIH0pXG4gIGNvbnN0IGJhc2VDb21wb25lbnRzID0gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgZnVuY3Rpb24gdXBkYXRlKGR0OiBudW1iZXIpIHtcbiAgICBjcmR0U3lzdGVtLnJlY2VpdmVNZXNzYWdlcygpXG5cbiAgICBmb3IgKGNvbnN0IHN5c3RlbSBvZiBlbmdpbmUuZ2V0U3lzdGVtcygpKSB7XG4gICAgICBzeXN0ZW0uZm4oZHQpXG4gICAgfVxuXG4gICAgLy8gU2VsZWN0ZWQgY29tcG9uZW50cyB0aGF0IG9ubHkgZXhpc3Qgb25lIGZyYW1lXG4gICAgLy8gIHRoZW4sIHRoZXkgYXJlIGRlbGV0ZWQgYnV0IHRoZWlyIGNyZHQgc3RhdGUga2VlcHNcbiAgICBjb25zdCByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMgPSBbXG4gICAgICBiYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0LFxuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBSZXN1bHRcbiAgICBdXG4gICAgY29uc3QgZXhjbHVkZUNvbXBvbmVudElkcyA9IHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cy5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKVxuICAgIGZvciAoY29uc3QgY29tcG9uZW50RGVmIG9mIHJlbW92ZVNlbGVjdGVkQ29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5XSBvZiBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKGNvbXBvbmVudERlZikpIHtcbiAgICAgICAgY29tcG9uZW50RGVmLmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFBlcmYgdGlwXG4gICAgLy8gU2hvdWxkIHdlIGFkZCBzb21lIGRpcnR5SXRlcmF0b3JTZXQgYXQgZW5naW5lIGxldmVsIHNvIHdlIGRvbnQgaGF2ZVxuICAgIC8vIHRvIGl0ZXJhdGUgYWxsIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbnMgdG8gZ2V0IHRoZSBkaXJ0eSBvbmVzID9cbiAgICBjb25zdCBkaXJ0eVNldCA9IG5ldyBNYXA8RW50aXR5LCBTZXQ8bnVtYmVyPj4oKVxuICAgIGZvciAoY29uc3QgW2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChleGNsdWRlQ29tcG9uZW50SWRzLmluY2x1ZGVzKGNvbXBvbmVudElkKSkgY29udGludWVcblxuICAgICAgZm9yIChjb25zdCBlbnRpdHkgb2YgZGVmaW5pdGlvbi5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgICAgaWYgKCFkaXJ0eVNldC5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIGRpcnR5U2V0LnNldChlbnRpdHksIG5ldyBTZXQoKSlcbiAgICAgICAgfVxuICAgICAgICBkaXJ0eVNldC5nZXQoZW50aXR5KSEuYWRkKGNvbXBvbmVudElkKVxuICAgICAgfVxuICAgIH1cbiAgICBjcmR0U3lzdGVtLmNyZWF0ZU1lc3NhZ2VzKGRpcnR5U2V0KVxuXG4gICAgZm9yIChjb25zdCBbX2NvbXBvbmVudElkLCBkZWZpbml0aW9uXSBvZiBlbmdpbmUuY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24uY2xlYXJEaXJ0eSgpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRFbnRpdHk6IGVuZ2luZS5hZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eTogZW5naW5lLmFkZER5bmFtaWNFbnRpdHksXG4gICAgcmVtb3ZlRW50aXR5OiBlbmdpbmUucmVtb3ZlRW50aXR5LFxuICAgIGFkZFN5c3RlbTogZW5naW5lLmFkZFN5c3RlbSxcbiAgICByZW1vdmVTeXN0ZW06IGVuZ2luZS5yZW1vdmVTeXN0ZW0sXG4gICAgZGVmaW5lQ29tcG9uZW50OiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50LFxuICAgIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE6IGVuZ2luZS5kZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aDogZW5naW5lLmdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQ6IGVuZ2luZS5nZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbjogZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24sXG4gICAgdXBkYXRlLFxuICAgIFJvb3RFbnRpdHk6IDAgYXMgRW50aXR5LFxuICAgIGJhc2VDb21wb25lbnRzXG4gIH1cbn1cbiIsImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5J1xuaW1wb3J0IHsgUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kIH0gZnJvbSAnLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUG9pbnRlckV2ZW50c1Jlc3VsdC5nZW4nXG5pbXBvcnQgeyBQb2ludGVyRXZlbnRUeXBlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvUG9pbnRlckV2ZW50cy5nZW4nXG5pbXBvcnQgeyBBY3Rpb25CdXR0b24gfSBmcm9tICcuLi9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCB7IElFbmdpbmUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgU2NoZW1hcyB9IGZyb20gJy4uL3NjaGVtYXMnXG5cbmNvbnN0IFVwZGF0ZVRpbWVzdGFtcFN0YXRlU2NoZW1hID0ge1xuICB0aW1lc3RhbXBMYXN0VXBkYXRlOiBTY2hlbWFzLk51bWJlcixcbiAgY3VycmVudFRpbWVzdGFtcDogU2NoZW1hcy5OdW1iZXJcbn1cblxuY29uc3QgV2FzRW50aXR5Q2xpY2tDb21wb25lbnRJRCA9IDE1MDBcbmNvbnN0IElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50SUQgPSAxNTAxXG5jb25zdCBFdmVudFN5c3RlbVByaW9yaXR5ID0gMSA8PCAyMFxuXG5leHBvcnQgZnVuY3Rpb24gd2FzRW50aXR5Q2xpY2tlZEdlbmVyYXRvcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgV2FzRW50aXR5Q2xpY2tDb21wb25lbnRTdGF0ZSA9IGVuZ2luZS5kZWZpbmVDb21wb25lbnQoXG4gICAgVXBkYXRlVGltZXN0YW1wU3RhdGVTY2hlbWEsXG4gICAgV2FzRW50aXR5Q2xpY2tDb21wb25lbnRJRFxuICApXG5cbiAgV2FzRW50aXR5Q2xpY2tDb21wb25lbnRTdGF0ZS5jcmVhdGUoZW5naW5lLlJvb3RFbnRpdHkpXG5cbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBXYXNFbnRpdHlDbGlja0NvbXBvbmVudFN0YXRlLmdldChlbmdpbmUuUm9vdEVudGl0eSlcbiAgICBpZiAoc3RhdGUuY3VycmVudFRpbWVzdGFtcCA+IHN0YXRlLnRpbWVzdGFtcExhc3RVcGRhdGUpIHtcbiAgICAgIFdhc0VudGl0eUNsaWNrQ29tcG9uZW50U3RhdGUuZ2V0TXV0YWJsZShcbiAgICAgICAgZW5naW5lLlJvb3RFbnRpdHlcbiAgICAgICkudGltZXN0YW1wTGFzdFVwZGF0ZSA9IHN0YXRlLmN1cnJlbnRUaW1lc3RhbXBcbiAgICB9XG4gIH0sIEV2ZW50U3lzdGVtUHJpb3JpdHkpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSwgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24pIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckV2ZW50c1Jlc3VsdC5nZXRPck51bGwoXG4gICAgICBlbmdpbmUuUm9vdEVudGl0eVxuICAgIClcblxuICAgIGlmICghY29tcG9uZW50KSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IGNvbW1hbmRzID0gY29tcG9uZW50LmNvbW1hbmRzXG5cbiAgICAvLyBXZSBzZWFyY2ggdGhlIGxhc3QgRE9XTiBjb21tYW5kIHNvcnRlZCBieSB0aW1lc3RhbXBcbiAgICBjb25zdCBkb3duID0gZmluZExhc3RBY3Rpb24oXG4gICAgICBjb21tYW5kcyxcbiAgICAgIFBvaW50ZXJFdmVudFR5cGUuRE9XTixcbiAgICAgIGFjdGlvbkJ1dHRvbixcbiAgICAgIGVudGl0eVxuICAgIClcbiAgICAvLyBXZSBzZWFyY2ggdGhlIGxhc3QgVVAgY29tbWFuZCBzb3J0ZWQgYnkgdGltZXN0YW1wXG4gICAgY29uc3QgdXAgPSBmaW5kTGFzdEFjdGlvbihcbiAgICAgIGNvbW1hbmRzLFxuICAgICAgUG9pbnRlckV2ZW50VHlwZS5VUCxcbiAgICAgIGFjdGlvbkJ1dHRvbixcbiAgICAgIGVudGl0eVxuICAgIClcblxuICAgIGlmICghZG93bikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKCF1cCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBzdGF0ZSA9IFdhc0VudGl0eUNsaWNrQ29tcG9uZW50U3RhdGUuZ2V0KGVuZ2luZS5Sb290RW50aXR5KVxuXG4gICAgLy8gSWYgdGhlIERPV04gY29tbWFuZCBoYXMgaGFwcGVuIGJlZm9yZSB0aGUgVVAgY29tbWFuZHMsIGl0IG1lYW5zIHRoYXQgdGhhdCBhIGNsaWNrZWQgaGFzIGhhcHBlblxuICAgIGlmIChcbiAgICAgIGRvd24udGltZXN0YW1wIDwgdXAudGltZXN0YW1wICYmXG4gICAgICB1cC50aW1lc3RhbXAgPiBzdGF0ZS50aW1lc3RhbXBMYXN0VXBkYXRlXG4gICAgKSB7XG4gICAgICBXYXNFbnRpdHlDbGlja0NvbXBvbmVudFN0YXRlLmdldE11dGFibGUoXG4gICAgICAgIGVuZ2luZS5Sb290RW50aXR5XG4gICAgICApLmN1cnJlbnRUaW1lc3RhbXAgPSBNYXRoLm1heCh1cC50aW1lc3RhbXAsIHN0YXRlLmN1cnJlbnRUaW1lc3RhbXApXG4gICAgICByZXR1cm4gdHJ1ZSAvLyBjbGlja2VkXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50ZXJFdmVudEFjdGl2ZUdlbmVyYXRvcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgSXNQb2ludGVyRXZlbnRBY3RpdmVDb21wb25lbnRTdGF0ZSA9IGVuZ2luZS5kZWZpbmVDb21wb25lbnQoXG4gICAgVXBkYXRlVGltZXN0YW1wU3RhdGVTY2hlbWEsXG4gICAgSXNQb2ludGVyRXZlbnRBY3RpdmVDb21wb25lbnRJRFxuICApXG5cbiAgSXNQb2ludGVyRXZlbnRBY3RpdmVDb21wb25lbnRTdGF0ZS5jcmVhdGUoZW5naW5lLlJvb3RFbnRpdHkpXG5cbiAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBJc1BvaW50ZXJFdmVudEFjdGl2ZUNvbXBvbmVudFN0YXRlLmdldChlbmdpbmUuUm9vdEVudGl0eSlcbiAgICBpZiAoc3RhdGUuY3VycmVudFRpbWVzdGFtcCA+IHN0YXRlLnRpbWVzdGFtcExhc3RVcGRhdGUpIHtcbiAgICAgIElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50U3RhdGUuZ2V0TXV0YWJsZShcbiAgICAgICAgZW5naW5lLlJvb3RFbnRpdHlcbiAgICAgICkudGltZXN0YW1wTGFzdFVwZGF0ZSA9IHN0YXRlLmN1cnJlbnRUaW1lc3RhbXBcbiAgICB9XG4gIH0sIEV2ZW50U3lzdGVtUHJpb3JpdHkpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbixcbiAgICBwb2ludGVyRXZlbnRUeXBlOiBQb2ludGVyRXZlbnRUeXBlXG4gICkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyRXZlbnRzUmVzdWx0LmdldE9yTnVsbChcbiAgICAgIGVuZ2luZS5Sb290RW50aXR5XG4gICAgKVxuXG4gICAgaWYgKCFjb21wb25lbnQpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBjb21wb25lbnQuY29tbWFuZHNcblxuICAgIC8vIFdlIHNlYXJjaCB0aGUgbGFzdCBwb2ludGVyIEV2ZW50IGNvbW1hbmQgc29ydGVkIGJ5IHRpbWVzdGFtcFxuICAgIGNvbnN0IGNvbW1hbmQgPSBmaW5kTGFzdEFjdGlvbihcbiAgICAgIGNvbW1hbmRzLFxuICAgICAgcG9pbnRlckV2ZW50VHlwZSxcbiAgICAgIGFjdGlvbkJ1dHRvbixcbiAgICAgIGVudGl0eVxuICAgIClcblxuICAgIGlmICghY29tbWFuZCkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBzdGF0ZSA9IElzUG9pbnRlckV2ZW50QWN0aXZlQ29tcG9uZW50U3RhdGUuZ2V0KGVuZ2luZS5Sb290RW50aXR5KVxuXG4gICAgaWYgKGNvbW1hbmQudGltZXN0YW1wID4gc3RhdGUudGltZXN0YW1wTGFzdFVwZGF0ZSkge1xuICAgICAgSXNQb2ludGVyRXZlbnRBY3RpdmVDb21wb25lbnRTdGF0ZS5nZXRNdXRhYmxlKFxuICAgICAgICBlbmdpbmUuUm9vdEVudGl0eVxuICAgICAgKS5jdXJyZW50VGltZXN0YW1wID0gTWF0aC5tYXgoY29tbWFuZC50aW1lc3RhbXAsIHN0YXRlLmN1cnJlbnRUaW1lc3RhbXApXG4gICAgICByZXR1cm4gdHJ1ZSAvLyB1cCBjb21wb25lbnQgaXMgZnJvbSBhbiBvbGQgY2xpY2tcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRMYXN0QWN0aW9uKFxuICBjb21tYW5kczogcmVhZG9ubHkgUEJQb2ludGVyRXZlbnRzUmVzdWx0X1BvaW50ZXJDb21tYW5kW10sXG4gIHBvaW50ZXJFdmVudFR5cGU6IFBvaW50ZXJFdmVudFR5cGUsXG4gIGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uLFxuICBlbnRpdHk/OiBFbnRpdHlcbik6IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjb21tYW5kVG9SZXR1cm46IFBCUG9pbnRlckV2ZW50c1Jlc3VsdF9Qb2ludGVyQ29tbWFuZCB8IHVuZGVmaW5lZCA9XG4gICAgdW5kZWZpbmVkXG5cbiAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNvbW1hbmRzKSB7XG4gICAgaWYgKFxuICAgICAgY29tbWFuZC5idXR0b24gPT09IGFjdGlvbkJ1dHRvbiAmJlxuICAgICAgY29tbWFuZC5zdGF0ZSA9PT0gcG9pbnRlckV2ZW50VHlwZSAmJlxuICAgICAgKCFlbnRpdHkgfHwgKGNvbW1hbmQuaGl0ICYmIGVudGl0eSA9PT0gY29tbWFuZC5oaXQuZW50aXR5SWQpKVxuICAgICkge1xuICAgICAgaWYgKCFjb21tYW5kVG9SZXR1cm4gfHwgY29tbWFuZC50aW1lc3RhbXAgPj0gY29tbWFuZFRvUmV0dXJuLnRpbWVzdGFtcClcbiAgICAgICAgY29tbWFuZFRvUmV0dXJuID0gY29tbWFuZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21tYW5kVG9SZXR1cm5cbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIC8vIGNvbnN0IHJwYyA9IG5ldyBScGNUcmFuc3BvcnQoKVxuICBmdW5jdGlvbiBzZW5kKC4uLl9hcmdzOiBhbnlbXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdOZXR3b3JrTWVzc2FnZSBTZW50OiAnLCAuLi5hcmdzKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICduZXR3b3JrLXRyYW5zcG9ydCdcbiAgcmV0dXJuIHtcbiAgICBzZW5kLFxuICAgIHR5cGUsXG4gICAgZmlsdGVyKG1lc3NhZ2U6IFRyYW5zcG9ydE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgICAgIC8vIEVjaG8gbWVzc2FnZSwgaWdub3JlIHRoZW1cbiAgICAgIGlmIChtZXNzYWdlLnRyYW5zcG9ydFR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IFN0YXRpYyBlbnRpdGllcyAmIE5ldHdvcmsgY29tcG9uZW50c1xuXG4gICAgICByZXR1cm4gISFtZXNzYWdlIC8vIHZhbGlkQ29tcG9uZW50cy5pbmNsdWRlcyhjb21wb25lbnRJZClcbiAgICB9XG4gIH1cbn1cbiIsIi8qKiBAcHVibGljICovXG5leHBvcnQgZW51bSBFQ1NDb21wb25lbnRJRHMge1xuXHRUcmFuc2Zvcm0gPSAxLFxuXHRBbmltYXRvciA9IDEwNDIsXG5cdEF1ZGlvU291cmNlID0gMTAyMCxcblx0QXZhdGFyQXR0YWNoID0gMTA3Myxcblx0QXZhdGFyTW9kaWZpZXJBcmVhID0gMTA3MCxcblx0QXZhdGFyU2hhcGUgPSAxMDgwLFxuXHRCaWxsYm9hcmQgPSAxMDkwLFxuXHRCb3hTaGFwZSA9IDEwMTMsXG5cdENhbWVyYU1vZGUgPSAxMDcyLFxuXHRDYW1lcmFNb2RlQXJlYSA9IDEwNzEsXG5cdEN5bGluZGVyU2hhcGUgPSAxMDE2LFxuXHRHTFRGU2hhcGUgPSAxMDQxLFxuXHRNYXRlcmlhbCA9IDEwMTcsXG5cdE1lc2hDb2xsaWRlciA9IDEwMTksXG5cdE1lc2hSZW5kZXJlciA9IDEwMTgsXG5cdE5GVFNoYXBlID0gMTA0MCxcblx0T25Qb2ludGVyRG93biA9IDEwNjAsXG5cdE9uUG9pbnRlckRvd25SZXN1bHQgPSAxMDY2LFxuXHRPblBvaW50ZXJVcCA9IDEwNjEsXG5cdE9uUG9pbnRlclVwUmVzdWx0ID0gMTA2NSxcblx0UGxhbmVTaGFwZSA9IDEwMTQsXG5cdFBvaW50ZXJFdmVudHMgPSAxMDYyLFxuXHRQb2ludGVyRXZlbnRzUmVzdWx0ID0gMTA2Myxcblx0UG9pbnRlckxvY2sgPSAxMDc0LFxuXHRSYXljYXN0ID0gMTA2Nyxcblx0UmF5Y2FzdFJlc3VsdCA9IDEwNjgsXG5cdFNwaGVyZVNoYXBlID0gMTAxNSxcblx0VGV4dFNoYXBlID0gMTAzMCxcblx0VWlUZXh0ID0gMTA1Mixcblx0VWlUcmFuc2Zvcm0gPSAxMDUwLFxuXHRWaXNpYmlsaXR5Q29tcG9uZW50ID0gMTA4MSxcbn1cbiIsImltcG9ydCB7IFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBFQ1NDb21wb25lbnRJRHMgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2dlbmVyYXRlZC9pZHMuZ2VuJ1xuXG5jb25zdCBjb21wb25lbnRJZHMgPSBPYmplY3QudmFsdWVzKEVDU0NvbXBvbmVudElEcylcbiAgLmZpbHRlcigoYSkgPT4gdHlwZW9mIGEgPT09ICdudW1iZXInKVxuICAubWFwKE51bWJlcilcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gIGlmICh0eXBlb2YgZGNsID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBuZXcgcnBjXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0Nhbm5vdCBjcmVhdGUgY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQgd2l0aG91dCBnbG9iYWwgZGNsIG9iamVjdCdcbiAgICApXG4gIH1cblxuICBjb25zdCB0eXBlID0gJ3JlbmRlcmVyJ1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgc2VuZChtZXNzYWdlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgICAgZGNsXG4gICAgICAgIC5jYWxsUnBjKCd+c3lzdGVtL0V4cGVyaW1lbnRhbEFQSScsICdzZW5kVG9SZW5kZXJlcicsIFtcbiAgICAgICAgICB7IGRhdGE6IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpIH1cbiAgICAgICAgXSlcbiAgICAgICAgLmNhdGNoKGRjbC5lcnJvcilcbiAgICB9LFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNlbmQgcmVuZGVyZXIgY29tcG9uZW50cyAoUHJvdG8gR2VuZXJhdGVkKVxuICAgICAgaWYgKCFjb21wb25lbnRJZHMuaW5jbHVkZXMobWVzc2FnZS5jb21wb25lbnRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhIW1lc3NhZ2VcbiAgICB9XG4gIH1cbn1cbiIsImRlY2xhcmUgbGV0IFByb21pc2U6IGFueVxuXG4vKipcbiAqIEEgY2xhc3Mgc2VydmVzIGFzIGEgbWVkaXVtIGJldHdlZW4gdGhlIG9ic2VydmFibGUgYW5kIGl0cyBvYnNlcnZlcnNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmVyRXZlbnRTdGF0ZSB7XG4gIC8qKlxuICAgKiBBbiBPYnNlcnZlciBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBwcmV2ZW50IHN1YnNlcXVlbnQgb2JzZXJ2ZXJzIG9mIGJlaW5nIG5vdGlmaWVkXG4gICAqL1xuICBwdWJsaWMgc2tpcE5leHRPYnNlcnZlcnMhOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbWFzayB2YWx1ZSB0aGF0IHdlcmUgdXNlZCB0byB0cmlnZ2VyIHRoZSBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgRXZlbnRTdGF0ZSBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBtYXNrITogbnVtYmVyXG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdGhhdCBvcmlnaW5hbGx5IG5vdGlmaWVkIHRoZSBldmVudFxuICAgKi9cbiAgcHVibGljIHRhcmdldD86IGFueVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBvYmplY3QgaW4gdGhlIGJ1YmJsaW5nIHBoYXNlXG4gICAqL1xuICBwdWJsaWMgY3VycmVudFRhcmdldD86IGFueVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgbGFzdCBmdW5jdGlvbiB0aGF0IHdhcyBleGVjdXRlZC5cbiAgICogSWYgaXQgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBjYWxsYmFjayBjaGFpbiBpdCB3aWxsIGJlIHRoZSBldmVudCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGxhc3RSZXR1cm5WYWx1ZT86IGFueVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRXZlbnRTdGF0ZVxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGVcbiAgICogQHBhcmFtIHNraXBOZXh0T2JzZXJ2ZXJzIC0gZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2JzZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgbWFzazogbnVtYmVyLFxuICAgIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsXG4gICAgdGFyZ2V0PzogYW55LFxuICAgIGN1cnJlbnRUYXJnZXQ/OiBhbnlcbiAgKSB7XG4gICAgdGhpcy5pbml0YWxpemUobWFzaywgc2tpcE5leHRPYnNlcnZlcnMsIHRhcmdldCwgY3VycmVudFRhcmdldClcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IGV2ZW50IHN0YXRlXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZVxuICAgKiBAcGFyYW0gc2tpcE5leHRPYnNlcnZlcnMgLSBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNraXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IGV2ZW50IHN0YXRlXG4gICAqL1xuICBwdWJsaWMgaW5pdGFsaXplKFxuICAgIG1hc2s6IG51bWJlcixcbiAgICBza2lwTmV4dE9ic2VydmVycyA9IGZhbHNlLFxuICAgIHRhcmdldD86IGFueSxcbiAgICBjdXJyZW50VGFyZ2V0PzogYW55XG4gICk6IE9ic2VydmVyRXZlbnRTdGF0ZSB7XG4gICAgdGhpcy5tYXNrID0gbWFza1xuICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBza2lwTmV4dE9ic2VydmVyc1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYW4gT2JzZXJ2ZXIgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIE9ic2VydmFibGUgb2JqZWN0LlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXI8VD4ge1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgcHJvcGVydHkgZGVmaW5pbmcgdGhhdCB0aGUgb2JzZXJ2ZXIgYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIHVucmVnaXN0ZXJPbk5leHRDYWxsID0gZmFsc2VcblxuICAvKiogRm9yIGludGVybmFsIHVzYWdlICovXG4gIHB1YmxpYyBfd2lsbEJlVW5yZWdpc3RlcmVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZlclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAqIEBwYXJhbSBzY29wZSAtIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAgICovXG4gICAgcHVibGljIG1hc2s6IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjdXJyZW50IHNjb3BlIHVzZWQgdG8gcmVzdG9yZSB0aGUgSlMgY29udGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyBzY29wZTogYW55ID0gbnVsbFxuICApIHt9XG59XG5cbi8qKlxuICogVGhlIE9ic2VydmFibGUgY2xhc3MgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9ic2VydmFibGUgcGF0dGVybi5cbiAqXG4gKiBUaGVyZSdzIG9uZSBzbGlnaHQgcGFydGljdWxhcml0eSB0aG91Z2g6IGEgZ2l2ZW4gT2JzZXJ2YWJsZSBjYW4gbm90aWZ5IGl0cyBvYnNlcnZlciB1c2luZyBhIHBhcnRpY3VsYXIgbWFzayB2YWx1ZSwgb25seSB0aGUgT2JzZXJ2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1hc2sgdmFsdWUgd2lsbCBiZSBub3RpZmllZC5cbiAqIFRoaXMgZW5hYmxlIGEgbW9yZSBmaW5lIGdyYWluZWQgZXhlY3V0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkgb24gbXVsdGlwbGUgZGlmZmVyZW50IE9ic2VydmFibGUgb2JqZWN0cy5cbiAqIEZvciBpbnN0YW5jZSB5b3UgbWF5IGhhdmUgYSBnaXZlbiBPYnNlcnZhYmxlIHRoYXQgaGF2ZSBmb3VyIGRpZmZlcmVudCB0eXBlcyBvZiBub3RpZmljYXRpb25zOiBNb3ZlIChtYXNrID0gMHgwMSksIFN0b3AgKG1hc2sgPSAweDAyKSwgVHVybiBSaWdodCAobWFzayA9IDBYMDQpLCBUdXJuIExlZnQgKG1hc2sgPSAwWDA4KS5cbiAqIEEgZ2l2ZW4gb2JzZXJ2ZXIgY2FuIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIG9ubHkgTW92ZSBhbmQgU3RvcCAobWFzayA9IDB4MDMpLCB0aGVuIGl0IHdpbGwgb25seSBiZSBub3RpZmllZCB3aGVuIG9uZSBvZiB0aGVzZSB0d28gb2NjdXJzIGFuZCB3aWxsIG5ldmVyIGJlIGZvciBUdXJuIExlZnQvUmlnaHQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZTxUPiB7XG4gIHByaXZhdGUgX29ic2VydmVycyA9IG5ldyBBcnJheTxPYnNlcnZlcjxUPj4oKVxuXG4gIHByaXZhdGUgX2V2ZW50U3RhdGU6IE9ic2VydmVyRXZlbnRTdGF0ZVxuXG4gIHByaXZhdGUgX29uT2JzZXJ2ZXJBZGRlZDogbnVsbCB8ICgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBvbk9ic2VydmVyQWRkZWQgLSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihvbk9ic2VydmVyQWRkZWQ/OiAob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZXZlbnRTdGF0ZSA9IG5ldyBPYnNlcnZlckV2ZW50U3RhdGUoMClcblxuICAgIGlmIChvbk9ic2VydmVyQWRkZWQpIHtcbiAgICAgIHRoaXMuX29uT2JzZXJ2ZXJBZGRlZCA9IG9uT2JzZXJ2ZXJBZGRlZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHBhcmFtIG1hc2sgLSB0aGUgbWFzayB1c2VkIHRvIGZpbHRlciBvYnNlcnZlcnNcbiAgICogQHBhcmFtIGluc2VydEZpcnN0IC0gaWYgdHJ1ZSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24sIGhlbmNlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgb3RoZXJzIG9uZXMuIElmIGZhbHNlIChkZWZhdWx0IGJlaGF2aW9yKSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiwgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBwcmVzZW50LlxuICAgKiBAcGFyYW0gc2NvcGUgLSBvcHRpb25hbCBzY29wZSBmb3IgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBmcm9tXG4gICAqIEBwYXJhbSB1bnJlZ2lzdGVyT25GaXJzdENhbGwgLSBkZWZpbmVzIGlmIHRoZSBvYnNlcnZlciBhcyB0byBiZSB1bnJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgYWRkKFxuICAgIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgbWFzazogbnVtYmVyID0gLTEsXG4gICAgaW5zZXJ0Rmlyc3QgPSBmYWxzZSxcbiAgICBzY29wZTogYW55ID0gbnVsbCxcbiAgICB1bnJlZ2lzdGVyT25GaXJzdENhbGwgPSBmYWxzZVxuICApOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2ssIG1hc2ssIHNjb3BlKVxuICAgIG9ic2VydmVyLnVucmVnaXN0ZXJPbk5leHRDYWxsID0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsXG5cbiAgICBpZiAoaW5zZXJ0Rmlyc3QpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy51bnNoaWZ0KG9ic2VydmVyKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb25PYnNlcnZlckFkZGVkKSB7XG4gICAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQob2JzZXJ2ZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9ic2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYWxsYmFjayBhbmQgdW5yZWdpc3RlcnMgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBjcmVhdGVkIGZvciB0aGUgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBhZGRPbmNlKFxuICAgIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWRcbiAgKTogbnVsbCB8IE9ic2VydmVyPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5hZGQoY2FsbGJhY2ssIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIE9ic2VydmVyIGZyb20gdGhlIE9ic2VydmFibGUgb2JqZWN0XG4gICAqIEBwYXJhbSBvYnNlcnZlciAtIHRoZSBpbnN0YW5jZSBvZiB0aGUgT2JzZXJ2ZXIgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIGl0IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZShvYnNlcnZlcjogbnVsbCB8IE9ic2VydmVyPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcilcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgT2JzZXJ2YWJsZSBvYmplY3RcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gdGhlIGNhbGxiYWNrIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gc2NvcGUgLSBvcHRpb25hbCBzY29wZS4gSWYgdXNlZCBvbmx5IHRoZSBjYWxsYmFja3Mgd2l0aCB0aGlzIHNjb3BlIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiBAcmV0dXJucyBmYWxzZSBpZiBpdCBkb2Vzbid0IGJlbG9uZyB0byB0aGlzIE9ic2VydmFibGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVDYWxsYmFjayhcbiAgICBjYWxsYmFjazogKGV2ZW50RGF0YTogVCwgZXZlbnRTdGF0ZTogT2JzZXJ2ZXJFdmVudFN0YXRlKSA9PiB2b2lkLFxuICAgIHNjb3BlPzogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9vYnNlcnZlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX29ic2VydmVyc1tpbmRleF0uY2FsbGJhY2sgPT09IGNhbGxiYWNrICYmXG4gICAgICAgICghc2NvcGUgfHwgc2NvcGUgPT09IHRoaXMuX29ic2VydmVyc1tpbmRleF0uc2NvcGUpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKHRoaXMuX29ic2VydmVyc1tpbmRleF0pXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGFsbCBPYnNlcnZlcnMgYnkgY2FsbGluZyB0aGVpciByZXNwZWN0aXZlIGNhbGxiYWNrIHdpdGggdGhlIGdpdmVuIGRhdGFcbiAgICogV2lsbCByZXR1cm4gdHJ1ZSBpZiBhbGwgb2JzZXJ2ZXJzIHdlcmUgZXhlY3V0ZWQsIGZhbHNlIGlmIGFuIG9ic2VydmVyIHNldCBza2lwTmV4dE9ic2VydmVycyB0byB0cnVlLCB0aGVuIHByZXZlbnQgdGhlIHN1YnNlcXVlbnQgb25lcyB0byBleGVjdXRlXG4gICAqIEBwYXJhbSBldmVudERhdGEgLSBkZWZpbmVzIHRoZSBkYXRhIHRvIHNlbmQgdG8gYWxsIG9ic2VydmVyc1xuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgb2YgdGhlIGN1cnJlbnQgbm90aWZpY2F0aW9uIChvYnNlcnZlcnMgd2l0aCBpbmNvbXBhdGlibGUgbWFzayAoaWUgbWFzayAmIG9ic2VydmVyLm1hc2sgPT09IDApIHdpbGwgbm90IGJlIG5vdGlmaWVkKVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcmV0dXJucyBmYWxzZSBpZiB0aGUgY29tcGxldGUgb2JzZXJ2ZXIgY2hhaW4gd2FzIG5vdCBwcm9jZXNzZWQgKGJlY2F1c2Ugb25lIG9ic2VydmVyIHNldCB0aGUgc2tpcE5leHRPYnNlcnZlcnMgdG8gdHJ1ZSlcbiAgICovXG4gIHB1YmxpYyBub3RpZnlPYnNlcnZlcnMoXG4gICAgZXZlbnREYXRhOiBULFxuICAgIG1hc2s6IG51bWJlciA9IC0xLFxuICAgIHRhcmdldD86IGFueSxcbiAgICBjdXJyZW50VGFyZ2V0PzogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fb2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2V2ZW50U3RhdGVcbiAgICBzdGF0ZS5tYXNrID0gbWFza1xuICAgIHN0YXRlLnRhcmdldCA9IHRhcmdldFxuICAgIHN0YXRlLmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0XG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGV2ZW50RGF0YVxuXG4gICAgZm9yIChjb25zdCBvYnMgb2YgdGhpcy5fb2JzZXJ2ZXJzKSB7XG4gICAgICBpZiAob2JzLl93aWxsQmVVbnJlZ2lzdGVyZWQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKG9icy5tYXNrICYgbWFzaykge1xuICAgICAgICBpZiAob2JzLnNjb3BlKSB7XG4gICAgICAgICAgc3RhdGUubGFzdFJldHVyblZhbHVlID0gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW1xuICAgICAgICAgICAgZXZlbnREYXRhLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICBdKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5jYWxsYmFjayhldmVudERhdGEsIHN0YXRlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9icy51bnJlZ2lzdGVyT25OZXh0Q2FsbCkge1xuICAgICAgICAgIHRoaXMuX2RlZmVyVW5yZWdpc3RlcihvYnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5za2lwTmV4dE9ic2VydmVycykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsaW5nIHRoaXMgd2lsbCBleGVjdXRlIGVhY2ggY2FsbGJhY2ssIGV4cGVjdGluZyBpdCB0byBiZSBhIHByb21pc2Ugb3IgcmV0dXJuIGEgdmFsdWUuXG4gICAqIElmIGF0IGFueSBwb2ludCBpbiB0aGUgY2hhaW4gb25lIGZ1bmN0aW9uIGZhaWxzLCB0aGUgcHJvbWlzZSB3aWxsIGZhaWwgYW5kIHRoZSBleGVjdXRpb24gd2lsbCBub3QgY29udGludWUuXG4gICAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBjaGFpbiBvZiBldmVudHMgKHNvbWV0aW1lcyBhc3luYyBldmVudHMpIGlzIG5lZWRlZCB0byBpbml0aWFsaXplIGEgY2VydGFpbiBvYmplY3RcbiAgICogYW5kIGl0IGlzIGNydWNpYWwgdGhhdCBhbGwgY2FsbGJhY2tzIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAqIFRoZSBvcmRlciBvZiB0aGUgY2FsbGJhY2tzIGlzIGtlcHQsIGNhbGxiYWNrcyBhcmUgbm90IGV4ZWN1dGVkIHBhcmFsbGVsLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnREYXRhIC0gVGhlIGRhdGEgdG8gYmUgc2VudCB0byBlYWNoIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBtYXNrIC0gaXMgdXNlZCB0byBmaWx0ZXIgb2JzZXJ2ZXJzIGRlZmF1bHRzIHRvIC0xXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0YXJnZXQgKHNlZSBFdmVudFN0YXRlKVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgaGUgY3VycmVudCBvYmplY3QgaW4gdGhlIGJ1YmJsaW5nIHBoYXNlXG4gICAqIEByZXR1cm5zIHdpbGwgcmV0dXJuIGEgUHJvbWlzZSB0aGFuIHJlc29sdmVzIHdoZW4gYWxsIGNhbGxiYWNrcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuXG4gICAqL1xuICBwdWJsaWMgbm90aWZ5T2JzZXJ2ZXJzV2l0aFByb21pc2UoXG4gICAgZXZlbnREYXRhOiBULFxuICAgIG1hc2s6IG51bWJlciA9IC0xLFxuICAgIHRhcmdldD86IGFueSxcbiAgICBjdXJyZW50VGFyZ2V0PzogYW55XG4gICk6IFByb21pc2U8VD4ge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlXG4gICAgbGV0IHA6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZShldmVudERhdGEpXG5cbiAgICAvLyBubyBvYnNlcnZlcnM/IHJldHVybiB0aGlzIHByb21pc2UuXG4gICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0XG4gICAgc3RhdGUuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXRcbiAgICBzdGF0ZS5za2lwTmV4dE9ic2VydmVycyA9IGZhbHNlXG5cbiAgICAvLyBleGVjdXRlIG9uZSBjYWxsYmFjayBhZnRlciBhbm90aGVyIChub3QgdXNpbmcgUHJvbWlzZS5hbGwsIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQpXG4gICAgdGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4ge1xuICAgICAgaWYgKHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5tYXNrICYgbWFzaykge1xuICAgICAgICBpZiAob2JzLnNjb3BlKSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwgc3RhdGVdKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JzLnVucmVnaXN0ZXJPbk5leHRDYWxsKSB7XG4gICAgICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9icylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyByZXR1cm4gdGhlIGV2ZW50RGF0YVxuICAgIHJldHVybiBwLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGV2ZW50RGF0YVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXJcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5XG4gICAqIEBwYXJhbSBldmVudERhdGEgLSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyKFxuICAgIG9ic2VydmVyOiBPYnNlcnZlcjxUPixcbiAgICBldmVudERhdGE6IFQsXG4gICAgbWFzazogbnVtYmVyID0gLTFcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlXG4gICAgc3RhdGUubWFzayA9IG1hc2tcbiAgICBzdGF0ZS5za2lwTmV4dE9ic2VydmVycyA9IGZhbHNlXG5cbiAgICBvYnNlcnZlci5jYWxsYmFjayhldmVudERhdGEsIHN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG9ic2VydmFibGUgaGFzIGF0IGxlYXN0IG9uZSBvYnNlcnZlclxuICAgKiBAcmV0dXJucyB0cnVlIGlzIHRoZSBPYnNlcnZhYmxlIGhhcyBhdCBsZWFzdCBvbmUgT2JzZXJ2ZXIgcmVnaXN0ZXJlZFxuICAgKi9cbiAgcHVibGljIGhhc09ic2VydmVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb2JzZXJ2ZXJzLmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbGlzdCBvZiBvYnNlcnZlcnNcbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlcnMgPSBuZXcgQXJyYXk8T2JzZXJ2ZXI8VD4+KClcbiAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ2xvbmUgdGhlIGN1cnJlbnQgb2JzZXJ2YWJsZVxuICAgKiBAcmV0dXJucyBhIG5ldyBvYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgY2xvbmUoKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE9ic2VydmFibGU8VD4oKVxuXG4gICAgcmVzdWx0Ll9vYnNlcnZlcnMgPSB0aGlzLl9vYnNlcnZlcnMuc2xpY2UoMClcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBEb2VzIHRoaXMgb2JzZXJ2YWJsZSBoYW5kbGVzIG9ic2VydmVyIHJlZ2lzdGVyZWQgd2l0aCBhIGdpdmVuIG1hc2tcbiAgICogQHBhcmFtIG1hc2sgLSBkZWZpbmVzIHRoZSBtYXNrIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJucyB3aGV0aGVyIG9yIG5vdCBvbmUgb2JzZXJ2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBnaXZlbiBtYXNrIGlzIGhhbmRlbGVkXG4gICAqL1xuICBwdWJsaWMgaGFzU3BlY2lmaWNNYXNrKG1hc2s6IG51bWJlciA9IC0xKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBvYnMgb2YgdGhpcy5fb2JzZXJ2ZXJzKSB7XG4gICAgICBpZiAob2JzLm1hc2sgJiBtYXNrIHx8IG9icy5tYXNrID09PSBtYXNrKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVmZXJVbnJlZ2lzdGVyKG9ic2VydmVyOiBPYnNlcnZlcjxUPik6IHZvaWQge1xuICAgIG9ic2VydmVyLnVucmVnaXN0ZXJPbk5leHRDYWxsID0gZmFsc2VcbiAgICBvYnNlcnZlci5fd2lsbEJlVW5yZWdpc3RlcmVkID0gdHJ1ZVxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSkoYXN5bmMgKCkgPT5cbiAgICAgIHRoaXMuX3JlbW92ZShvYnNlcnZlcilcbiAgICApXG4gIH1cblxuICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG5vdCBpdGVyYXRpbmcgb3ZlciBfb2JzZXJ2ZXJzIHRvIGF2b2lkIGNhbGxiYWNrIHNraXBwaW5nLlxuICAvLyBSZW1vdmVzIGFuIG9ic2VydmVyIGZyb20gdGhlIF9vYnNlcnZlciBBcnJheS5cbiAgcHJpdmF0ZSBfcmVtb3ZlKG9ic2VydmVyOiBudWxsIHwgT2JzZXJ2ZXI8VD4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKVxuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXJzLnNwbGljZShpbmRleCwgMSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL3RlbXAtZnAvT2JzZXJ2YWJsZSdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgY2FsbGJhY2sgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIE9ic2VydmFibGVcbiAqIGNvbnN0cnVjdG9yIHRvIHN1YnNjcmliZSB0byB0aGUgZXZlbnRzIG9mIHRoZSBEZWNlbnRyYWxhbmRJbnRlcmZhY2VcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3Vic2NyaWJlcihldmVudE5hbWU6IGtleW9mIElFdmVudHMpIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAodHlwZW9mIGRjbCAhPT0gJ3VuZGVmaW5lZCcpIGRjbC5zdWJzY3JpYmUoZXZlbnROYW1lKVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB5b3UgY2hhbmdlIHlvdXIgY2FtZXJhIGJldHdlZW4gMXN0IGFuZCAzcmQgcGVyc29uXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25DYW1lcmFNb2RlQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1snY2FtZXJhTW9kZUNoYW5nZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdjYW1lcmFNb2RlQ2hhbmdlZCcpKVxuXG4vKipcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4geW91IGNoYW5nZSB5b3VyIGNhbWVyYSBiZXR3ZWVuIDFzdCBhbmQgM3JkIHBlcnNvblxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uSWRsZVN0YXRlQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1snaWRsZVN0YXRlQ2hhbmdlZCddXG4+KGNyZWF0ZVN1YnNjcmliZXIoJ2lkbGVTdGF0ZUNoYW5nZWQnKSlcblxuLyoqXG4gKiBUaGVzZSBldmVudHMgYXJlIHRyaWdnZXJlZCBhZnRlciB5b3VyIGNoYXJhY3RlciBlbnRlcnMgdGhlIHNjZW5lLlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uRW50ZXJTY2VuZU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydvbkVudGVyU2NlbmUnXT4oXG4gIGNyZWF0ZVN1YnNjcmliZXIoJ29uRW50ZXJTY2VuZScpXG4pXG5cbi8qKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC4gVXNlIG9uRW50ZXJTY2VuZU9ic2VydmFibGUgaW5zdGVhZC4gKi9cbmV4cG9ydCBjb25zdCBvbkVudGVyU2NlbmUgPSBvbkVudGVyU2NlbmVPYnNlcnZhYmxlXG5cbi8qKlxuICogVGhlc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgYWZ0ZXIgeW91ciBjaGFyYWN0ZXIgbGVhdmVzIHRoZSBzY2VuZS5cbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8SUV2ZW50c1snb25MZWF2ZVNjZW5lJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdvbkxlYXZlU2NlbmUnKVxuKVxuXG4vKiogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuIFVzZSBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlIGluc3RlYWQuICovXG5leHBvcnQgY29uc3Qgb25MZWF2ZVNjZW5lID0gb25MZWF2ZVNjZW5lT2JzZXJ2YWJsZVxuXG4vKipcbiAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIGFsbCB0aGUgcmVzb3VyY2VzIG9mIHRoZSBzY2VuZSB3ZXJlIGxvYWRlZCAobW9kZWxzLCB0ZXh0dXJlcywgZXRjLi4uKVxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uU2NlbmVSZWFkeU9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWydzY2VuZVN0YXJ0J10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdzY2VuZVN0YXJ0JylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJFeHByZXNzaW9uT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFxuICBJRXZlbnRzWydwbGF5ZXJFeHByZXNzaW9uJ11cbj4oY3JlYXRlU3Vic2NyaWJlcigncGxheWVyRXhwcmVzc2lvbicpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBvaW50ZXJMb2NrZWRTdGF0ZUNoYW5nZSA9IG5ldyBPYnNlcnZhYmxlPFxuICBJRXZlbnRzWydvblBvaW50ZXJMb2NrJ11cbj4oY3JlYXRlU3Vic2NyaWJlcignb25Qb2ludGVyTG9jaycpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblZpZGVvRXZlbnQgPSBuZXcgT2JzZXJ2YWJsZTxJRXZlbnRzWyd2aWRlb0V2ZW50J10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCd2aWRlb0V2ZW50JylcbilcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25Qcm9maWxlQ2hhbmdlZCA9IG5ldyBPYnNlcnZhYmxlPElFdmVudHNbJ3Byb2ZpbGVDaGFuZ2VkJ10+KFxuICBjcmVhdGVTdWJzY3JpYmVyKCdwcm9maWxlQ2hhbmdlZCcpXG4pXG5cbi8qKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG9uUGxheWVyQ29ubmVjdGVkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPFxuICBJRXZlbnRzWydwbGF5ZXJDb25uZWN0ZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJDb25uZWN0ZWQnKSlcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIGFuIGluaGVyaXRhbmNlIG9mIEVDUzYsIGl0J3MgaGVyZSB0ZW1wb3JhcnkgZm9yIHRoZSBmZWF0dXJlIHBhcml0eSwgcGxlYXNlIHJlYWQgdGhlIG5ld3MgYW5kIGRvY3MgdG8ga25vdyBob3cgaGFuZGxlIHdoZW4gaXQncyByZW1vdmVkLlxuICovXG5leHBvcnQgY29uc3Qgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8XG4gIElFdmVudHNbJ3BsYXllckRpc2Nvbm5lY3RlZCddXG4+KGNyZWF0ZVN1YnNjcmliZXIoJ3BsYXllckRpc2Nvbm5lY3RlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblJlYWxtQ2hhbmdlZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZTxcbiAgSUV2ZW50c1snb25SZWFsbUNoYW5nZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdvblJlYWxtQ2hhbmdlZCcpKVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBkZXByZWNhdGVkIFRoaXMgZnVuY3Rpb24gaXMgYW4gaW5oZXJpdGFuY2Ugb2YgRUNTNiwgaXQncyBoZXJlIHRlbXBvcmFyeSBmb3IgdGhlIGZlYXR1cmUgcGFyaXR5LCBwbGVhc2UgcmVhZCB0aGUgbmV3cyBhbmQgZG9jcyB0byBrbm93IGhvdyBoYW5kbGUgd2hlbiBpdCdzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBvblBsYXllckNsaWNrZWRPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGU8XG4gIElFdmVudHNbJ3BsYXllckNsaWNrZWQnXVxuPihjcmVhdGVTdWJzY3JpYmVyKCdwbGF5ZXJDbGlja2VkJykpXG5cbi8qKlxuICogQGludGVybmFsXG4gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgX29uZV8gbGlzdGVuZXIgdG8gdGhlIG9uRXZlbnQgZXZlbnQgb2YgZGNsIGludGVyZmFjZS5cbiAqIExldmVyYWdpbmcgYSBzd2l0Y2ggdG8gcm91dGUgZXZlbnRzIHRvIHRoZSBPYnNlcnZhYmxlIGhhbmRsZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2luaXRFdmVudE9ic2VydmFibGVzKCkge1xuICBpZiAodHlwZW9mIGRjbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkY2wub25FdmVudCgoZXZlbnQpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICBjYXNlICdvbkVudGVyU2NlbmUnOiB7XG4gICAgICAgICAgb25FbnRlclNjZW5lT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ29uRW50ZXJTY2VuZSddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ29uTGVhdmVTY2VuZSc6IHtcbiAgICAgICAgICBvbkxlYXZlU2NlbmVPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1snb25MZWF2ZVNjZW5lJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnY2FtZXJhTW9kZUNoYW5nZWQnOiB7XG4gICAgICAgICAgb25DYW1lcmFNb2RlQ2hhbmdlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydjYW1lcmFNb2RlQ2hhbmdlZCddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2lkbGVTdGF0ZUNoYW5nZWQnOiB7XG4gICAgICAgICAgb25JZGxlU3RhdGVDaGFuZ2VkT2JzZXJ2YWJsZS5ub3RpZnlPYnNlcnZlcnMoXG4gICAgICAgICAgICBldmVudC5kYXRhIGFzIElFdmVudHNbJ2lkbGVTdGF0ZUNoYW5nZWQnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdzY2VuZVN0YXJ0Jzoge1xuICAgICAgICAgIG9uU2NlbmVSZWFkeU9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydzY2VuZVN0YXJ0J11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAncGxheWVyRXhwcmVzc2lvbic6IHtcbiAgICAgICAgICBvblBsYXllckV4cHJlc3Npb25PYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sncGxheWVyRXhwcmVzc2lvbiddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3ZpZGVvRXZlbnQnOiB7XG4gICAgICAgICAgY29uc3QgdmlkZW9EYXRhID0gZXZlbnQuZGF0YSBhcyBJRXZlbnRzWyd2aWRlb0V2ZW50J11cbiAgICAgICAgICBvblZpZGVvRXZlbnQubm90aWZ5T2JzZXJ2ZXJzKHZpZGVvRGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwcm9maWxlQ2hhbmdlZCc6IHtcbiAgICAgICAgICBvblByb2ZpbGVDaGFuZ2VkLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sncHJvZmlsZUNoYW5nZWQnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdvblBvaW50ZXJMb2NrJzoge1xuICAgICAgICAgIG9uUG9pbnRlckxvY2tlZFN0YXRlQ2hhbmdlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1snb25Qb2ludGVyTG9jayddXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BsYXllckNvbm5lY3RlZCc6IHtcbiAgICAgICAgICBvblBsYXllckNvbm5lY3RlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydwbGF5ZXJDb25uZWN0ZWQnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJEaXNjb25uZWN0ZWQnOiB7XG4gICAgICAgICAgb25QbGF5ZXJEaXNjb25uZWN0ZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1sncGxheWVyRGlzY29ubmVjdGVkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnb25SZWFsbUNoYW5nZWQnOiB7XG4gICAgICAgICAgb25SZWFsbUNoYW5nZWRPYnNlcnZhYmxlLm5vdGlmeU9ic2VydmVycyhcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgYXMgSUV2ZW50c1snb25SZWFsbUNoYW5nZWQnXVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwbGF5ZXJDbGlja2VkJzoge1xuICAgICAgICAgIG9uUGxheWVyQ2xpY2tlZE9ic2VydmFibGUubm90aWZ5T2JzZXJ2ZXJzKFxuICAgICAgICAgICAgZXZlbnQuZGF0YSBhcyBJRXZlbnRzWydwbGF5ZXJDbGlja2VkJ11cbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkBkY2wvcG9zaXhcIiAvPlxuXG4vKipcbiAqIEBhbHBoYSAqIFRoaXMgZmlsZSBpbml0aWFsaXphdGlvbiBpcyBhbiBhbHBoYSBvbmUuIFRoaXMgaXMgYmFzZWQgb24gdGhlIG9sZC1lY3NcbiAqIGluaXQgYW5kIGl0J2xsIGJlIGNoYW5naW5nLlxuICovXG5cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9BY3Rpb25CdXR0b24uZ2VuJ1xuaW1wb3J0IHsgUG9pbnRlckV2ZW50VHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJFdmVudHMuZ2VuJ1xuaW1wb3J0IHsgRW5naW5lLCBFbnRpdHkgfSBmcm9tICcuLi9lbmdpbmUnXG5pbXBvcnQge1xuICBpc1BvaW50ZXJFdmVudEFjdGl2ZUdlbmVyYXRvcixcbiAgd2FzRW50aXR5Q2xpY2tlZEdlbmVyYXRvclxufSBmcm9tICcuLi9lbmdpbmUvZXZlbnRzJ1xuaW1wb3J0IHsgY3JlYXRlTmV0d29ya1RyYW5zcG9ydCB9IGZyb20gJy4uL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL25ldHdvcmtUcmFuc3BvcnQnXG5pbXBvcnQgeyBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCB9IGZyb20gJy4uL3N5c3RlbXMvY3JkdC90cmFuc3BvcnRzL3JlbmRlcmVyVHJhbnNwb3J0J1xuaW1wb3J0IHsgX2luaXRFdmVudE9ic2VydmFibGVzIH0gZnJvbSAnLi9vYnNlcnZhYmxlcydcblxuY29uc3QgcmVuZGVyZXJUcmFuc3BvcnQgPSBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpXG5leHBvcnQgY29uc3QgZW5naW5lID0gRW5naW5lKHtcbiAgdHJhbnNwb3J0czogW3JlbmRlcmVyVHJhbnNwb3J0LCBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCldXG59KVxuXG5pZiAodHlwZW9mIGRjbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZGNsLmxvYWRNb2R1bGUoJ35zeXN0ZW0vRXhwZXJpbWVudGFsQVBJJywge30pLmNhdGNoKGRjbC5lcnJvcilcblxuICBhc3luYyBmdW5jdGlvbiBwdWxsUmVuZGVyZXJNZXNzYWdlcygpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRjbC5jYWxsUnBjKFxuICAgICAgJ35zeXN0ZW0vRXhwZXJpbWVudGFsQVBJJyxcbiAgICAgICdtZXNzYWdlRnJvbVJlbmRlcmVyJyxcbiAgICAgIFtdXG4gICAgKVxuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgaWYgKHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGJ5dGVBcnJheSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKGJ5dGVBcnJheSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRjbC5vblVwZGF0ZSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIHB1bGxSZW5kZXJlck1lc3NhZ2VzKClcbiAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgICAuZmluYWxseSgoKSA9PiBlbmdpbmUudXBkYXRlKGR0KSlcbiAgfSlcblxuICBfaW5pdEV2ZW50T2JzZXJ2YWJsZXMoKVxufVxuXG5leHBvcnQgY29uc3QgbG9nID0gZGNsLmxvZ1xuZXhwb3J0IGNvbnN0IGVycm9yID0gZGNsLmVycm9yXG5cbmxldCB3YXNFbnRpdHlDbGlja2VkRnVuYzpcbiAgfCAoKGVudGl0eTogRW50aXR5LCBhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbikgPT4gYm9vbGVhbilcbiAgfCBudWxsID0gbnVsbFxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVudGl0eSBlbWl0dGVkIGEgY2xpY2tlZCBldmVudFxuICogQHBhcmFtIGVudGl0eSB0aGUgZW50aXR5IHRvIHF1ZXJ5LCBmb3IgZ2xvYmFsIGNsaWNrcyB1c2UgYGVuZ2luZS5Sb290RW50aXR5YFxuICogQHBhcmFtIGFjdGlvbkJ1dHRvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZW50aXR5IHdhcyBjbGlja2VkIGluIHRoZSBsYXN0IHRpY2stdXBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXNFbnRpdHlDbGlja2VkKGVudGl0eTogRW50aXR5LCBhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbikge1xuICBpZiAoIXdhc0VudGl0eUNsaWNrZWRGdW5jKSB7XG4gICAgd2FzRW50aXR5Q2xpY2tlZEZ1bmMgPSB3YXNFbnRpdHlDbGlja2VkR2VuZXJhdG9yKGVuZ2luZSlcbiAgfVxuICByZXR1cm4gd2FzRW50aXR5Q2xpY2tlZEZ1bmMoZW50aXR5LCBhY3Rpb25CdXR0b24pXG59XG5cbmxldCBpc1BvaW50ZXJFdmVudEFjdGl2ZUZ1bmM6XG4gIHwgKChcbiAgICAgIGVudGl0eTogRW50aXR5LFxuICAgICAgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24sXG4gICAgICBwb2ludGVyRXZlbnRUeXBlOiBQb2ludGVyRXZlbnRUeXBlXG4gICAgKSA9PiBib29sZWFuKVxuICB8IG51bGwgPSBudWxsXG5cbi8qKlxuICogQ2hlY2sgaWYgYSBwb2ludGVyIGV2ZW50IGhhcyBiZWVuIGVtaXRlZCBpbiB0aGUgbGFzdCB0aWNrLXVwZGF0ZS5cbiAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byBxdWVyeSwgZm9yIGdsb2JhbCBjbGlja3MgdXNlIGBlbmdpbmUuUm9vdEVudGl0eWBcbiAqIEBwYXJhbSBhY3Rpb25CdXR0b25cbiAqIEBwYXJhbSBwb2ludGVyRXZlbnRUeXBlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb2ludGVyRXZlbnRBY3RpdmUoXG4gIGVudGl0eTogRW50aXR5LFxuICBhY3Rpb25CdXR0b246IEFjdGlvbkJ1dHRvbixcbiAgcG9pbnRlckV2ZW50VHlwZTogUG9pbnRlckV2ZW50VHlwZVxuKSB7XG4gIGlmICghaXNQb2ludGVyRXZlbnRBY3RpdmVGdW5jKSB7XG4gICAgaXNQb2ludGVyRXZlbnRBY3RpdmVGdW5jID0gaXNQb2ludGVyRXZlbnRBY3RpdmVHZW5lcmF0b3IoZW5naW5lKVxuICB9XG4gIHJldHVybiBpc1BvaW50ZXJFdmVudEFjdGl2ZUZ1bmMoZW50aXR5LCBhY3Rpb25CdXR0b24sIHBvaW50ZXJFdmVudFR5cGUpXG59XG4iLCJpbXBvcnQgeyBJRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzJ1xuXG4vKipcbiAqIFRyYW5zZm9ybSBwYXJlbnRpbmc6IGN5Y2xpYyBkZXBlbmRlbmN5IGNoZWNrZXJcbiAqIEl0IGNoZWNrcyBvbmx5IGluIG1vZGlmaWVkIFRyYW5zZm9ybXNcbiAqXG4gKiBBZGQgdGhpcyBzeXN0ZW0gd2l0aDpcbiAqIGBgYHRzXG4gKiAgZW5naW5lLmFkZFN5c3RlbShjeWNsaWNQYXJlbnRpbmdDaGVja2VyKGVuZ2luZSkpXG4gKiBgYGBgXG4gKiBBbmQgdGhlbiBpdCB3aWxsIGNoZWNrIGV2ZXJ5IHRpY2sgdGhlIHBhcmVudGluZy5cbiAqXG4gKiBAcHVibGljXG4gKlxuICogQHBhcmFtcyBlbmdpbmVcbiAqIEByZXR1cm5zIGEgc3lzdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjeWNsaWNQYXJlbnRpbmdDaGVja2VyKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVHJhbnNmb3JtXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgVHJhbnNmb3JtLmRpcnR5SXRlcmF0b3IoKSkge1xuICAgICAgbGV0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPck51bGwoZW50aXR5KVxuICAgICAgd2hpbGUgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0ucGFyZW50KSB7XG4gICAgICAgIGlmICh0cmFuc2Zvcm0ucGFyZW50ID09PSBlbnRpdHkpIHtcbiAgICAgICAgICBkY2wuZXJyb3IoYFRoZXJlIGlzIGEgY3ljbGljIHBhcmVudCB3aXRoIGVudGl0eSAke2VudGl0eX1gKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE9yTnVsbCh0cmFuc2Zvcm0ucGFyZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBlbmdpbmUgfSBmcm9tICcuLi8uLi9ydW50aW1lL2luaXRpYWxpemF0aW9uJ1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5UcmFuc2Zvcm1cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXVkaW9Tb3VyY2UgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXVkaW9Tb3VyY2Vcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhckF0dGFjaFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhclNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJpbGxib2FyZCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5CaWxsYm9hcmRcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQ2FtZXJhTW9kZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkNhbWVyYU1vZGVBcmVhXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBHTFRGU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuR0xURlNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1hdGVyaWFsID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1hdGVyaWFsXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoQ29sbGlkZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTWVzaFJlbmRlcmVyID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk1lc2hSZW5kZXJlclxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBORlRTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5ORlRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93blJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duUmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUGxhbmVTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQb2ludGVyRXZlbnRzID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJFdmVudHNcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUG9pbnRlckV2ZW50c1Jlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyRXZlbnRzUmVzdWx0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJMb2NrXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFJheWNhc3QgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUmF5Y2FzdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBSYXljYXN0UmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlJheWNhc3RSZXN1bHRcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuU3BoZXJlU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFVpVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVHJhbnNmb3JtXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVmlzaWJpbGl0eUNvbXBvbmVudFxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcbi8qKiBAcHVibGljICovXG5leHBvcnQgbmFtZXNwYWNlIENvbXBvbmVudHMge1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJBdHRhY2ggPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyQXR0YWNoXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQmlsbGJvYXJkID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJpbGxib2FyZFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ2FtZXJhTW9kZUFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZUFyZWFcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWF0ZXJpYWwgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWF0ZXJpYWxcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoQ29sbGlkZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE5GVFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk5GVFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyVXAgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBvaW50ZXJFdmVudHMgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckV2ZW50c1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUG9pbnRlckV2ZW50c1Jlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyRXZlbnRzUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQb2ludGVyTG9jayA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5Qb2ludGVyTG9ja1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgUmF5Y2FzdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5SYXljYXN0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBSYXljYXN0UmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlJheWNhc3RSZXN1bHRcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFNwaGVyZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlNwaGVyZVNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBUZXh0U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVGV4dFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBVaVRyYW5zZm9ybSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5VaVRyYW5zZm9ybVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5WaXNpYmlsaXR5Q29tcG9uZW50XG59XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwidGhpcyIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwiZ2xvYmFsIiwiX20wIiwiQ09NUE9ORU5UX0lEIiwibG9uZ1RvTnVtYmVyIiwiZ2xvYmFsVGhpcyIsIkxvbmciLCJBbmltYXRvclNjaGVtYS5BbmltYXRvclNjaGVtYSIsIkFuaW1hdG9yU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hIiwiQXVkaW9Tb3VyY2VTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyQXR0YWNoU2NoZW1hLkF2YXRhckF0dGFjaFNjaGVtYSIsIkF2YXRhckF0dGFjaFNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIiwiQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhclNoYXBlU2NoZW1hLkF2YXRhclNoYXBlU2NoZW1hIiwiQXZhdGFyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQmlsbGJvYXJkU2NoZW1hLkJpbGxib2FyZFNjaGVtYSIsIkJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQiLCJCb3hTaGFwZVNjaGVtYS5Cb3hTaGFwZVNjaGVtYSIsIkJveFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkNhbWVyYU1vZGVTY2hlbWEuQ2FtZXJhTW9kZVNjaGVtYSIsIkNhbWVyYU1vZGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEiLCJDYW1lcmFNb2RlQXJlYVNjaGVtYS5DT01QT05FTlRfSUQiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkdMVEZTaGFwZVNjaGVtYS5HTFRGU2hhcGVTY2hlbWEiLCJHTFRGU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEiLCJNYXRlcmlhbFNjaGVtYS5DT01QT05FTlRfSUQiLCJNZXNoQ29sbGlkZXJTY2hlbWEuTWVzaENvbGxpZGVyU2NoZW1hIiwiTWVzaENvbGxpZGVyU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEiLCJNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTkZUU2hhcGVTY2hlbWEuTkZUU2hhcGVTY2hlbWEiLCJORlRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJEb3duU2NoZW1hLk9uUG9pbnRlckRvd25TY2hlbWEiLCJPblBvaW50ZXJEb3duU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEiLCJPblBvaW50ZXJVcFNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5PblBvaW50ZXJVcFJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBsYW5lU2hhcGVTY2hlbWEuUGxhbmVTaGFwZVNjaGVtYSIsIlBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUG9pbnRlckV2ZW50c1NjaGVtYS5Qb2ludGVyRXZlbnRzU2NoZW1hIiwiUG9pbnRlckV2ZW50c1NjaGVtYS5DT01QT05FTlRfSUQiLCJQb2ludGVyRXZlbnRzUmVzdWx0U2NoZW1hLlBvaW50ZXJFdmVudHNSZXN1bHRTY2hlbWEiLCJQb2ludGVyRXZlbnRzUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBvaW50ZXJMb2NrU2NoZW1hLlBvaW50ZXJMb2NrU2NoZW1hIiwiUG9pbnRlckxvY2tTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUmF5Y2FzdFNjaGVtYS5SYXljYXN0U2NoZW1hIiwiUmF5Y2FzdFNjaGVtYS5DT01QT05FTlRfSUQiLCJSYXljYXN0UmVzdWx0U2NoZW1hLlJheWNhc3RSZXN1bHRTY2hlbWEiLCJSYXljYXN0UmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlNwaGVyZVNoYXBlU2NoZW1hLlNwaGVyZVNoYXBlU2NoZW1hIiwiU3BoZXJlU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVGV4dFNoYXBlU2NoZW1hLlRleHRTaGFwZVNjaGVtYSIsIlRleHRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJVaVRleHRTY2hlbWEuVWlUZXh0U2NoZW1hIiwiVWlUZXh0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlVpVHJhbnNmb3JtU2NoZW1hLlVpVHJhbnNmb3JtU2NoZW1hIiwiVWlUcmFuc2Zvcm1TY2hlbWEuQ09NUE9ORU5UX0lEIiwiVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5WaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIiwiVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5DT01QT05FTlRfSUQiLCJTY2hlbWFzIiwiaUludDY0IiwiV2lyZU1lc3NhZ2UiLCJjcmR0UHJvdG9jb2wiLCJNZXNzYWdlIiwiZGVmQ29tcG9uZW50IiwiZGVmaW5lQ29tcG9uZW50IiwiQ29tcG9uZW50cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FDQSxNQUFNLENBQUMsY0FBYyxDQUFBLE9BQUEsRUFBVSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFB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LENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7ZUFDbkYsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RGO0NBQ1QsVUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7Q0FDakMsVUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7Q0FDakMsVUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7Q0FDakM7Q0FDQSxVQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNuRCxVQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNuRCxVQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUMzQyxPQUFPLEdBQUcsQ0FBQztRQUNkO0NBQ0wsTUFBSSxVQUFVLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztDQUN6QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMseUJBQXlCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0NBQ2pFO0NBQ0EsVUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0NBQ3RDLFVBQVEsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNsQyxVQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7V0FDNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDdEMsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDO0NBQ0wsTUFBSSxVQUFVLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7Q0FDckU7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQ3JELFVBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUMvQjtXQUNRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQzNEO1dBQ1EsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7V0FDOUIsSUFBSSxDQUFDLENBQUM7Q0FDZCxVQUFRLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtDQUN2QixjQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDN0MsY0FBWSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7ZUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO2VBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztlQUMzQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDOUI7Z0JBQ0ksSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUU7Q0FDekMsY0FBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7ZUFDM0MsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLGNBQVksTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2VBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztlQUMzQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDOUI7Q0FDVCxlQUFhLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRTtDQUM1QixjQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztlQUMzQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7ZUFDM0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLGNBQVksTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2VBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5QjtnQkFDSTtDQUNiLGNBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2VBQzNDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztlQUMzQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7ZUFDM0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0NBQ3ZDLGNBQVksTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCO1FBQ0o7Q0FDTCxNQUFJLFVBQVUsQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztDQUNqRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0NBQ3hDLFVBQVEsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0NBQzdDLFVBQVEsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztXQUNuRCxPQUFPLE1BQU0sQ0FBQztRQUNqQjtDQUNMLE1BQUksVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDN0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7V0FDN0MsSUFBSSxJQUFJLENBQUM7V0FDVCxJQUFJLElBQUksQ0FBQztDQUNqQixVQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM3RixVQUFRLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQztDQUN6QixVQUFRLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtlQUNWLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDeEIsY0FBWSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDaEI7Q0FDVCxVQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtDQUM3QixjQUFZLElBQUksR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO2VBQ2xCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2xDO2dCQUNJO2VBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztlQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUM5QyxjQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7ZUFDOUMsSUFBSSxHQUFHLElBQUk7cUJBQ0wsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJO3FCQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEM7Q0FDVCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDbEQsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQ2xELFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUNsRCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0M7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0NBQ3ZDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtDQUNoQyxVQUFRLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztXQUNwQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztXQUNoQyxPQUFPLE1BQU0sQ0FBQztRQUNqQjtDQUNMLE1BQUksVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtDQUM3QyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNsRixVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RTtDQUNMLE1BQUksVUFBVSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Q0FDN0MsTUFBSSxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO1dBQzlCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0NBQ3pELGNBQVksT0FBTyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEM7Q0FDVCxVQUFRLE1BQU0sTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1dBQzFCLElBQUksT0FBTyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1dBQ3hDLE9BQU8sSUFBSSxHQUFHLENBQUM7V0FDZixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUNyRCxVQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0NBQ2hFLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ3hCLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQ2hCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztDQUNyQyxVQUFRLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCO0NBQ0wsTUFBSSxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztDQUNyQztDQUNBO0NBQ0E7T0FDSSxTQUFTLElBQUksR0FBRztXQUNaLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDO0NBQ0wsTUFBSSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUMxQixFQUFlLE9BQU8sQ0FBQyxVQUFVLEtBQUssT0FBcUIsQ0FBQSxVQUFBLEdBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUNqRSxFQUFBOzs7Ozs7Ozs7OztHQ3RhQSxJQUFJLGVBQWUsR0FBRyxDQUFDQyxjQUFJLElBQUlBLGNBQUksQ0FBQyxlQUFlLE1BQU0sTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtPQUM1RixJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztPQUM3QixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RixLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO09BQ3hCLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzdCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7Q0FDSixFQUFBLElBQUksWUFBWSxHQUFHLENBQUNBLGNBQUksSUFBSUEsY0FBSSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUU7Q0FDdkUsTUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQzlILEdBQUMsQ0FBQztHQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0NBQzlELEVBQUEsWUFBWSxDQUFDSCxpQkFBQSxFQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQy9DLEVBQUEsWUFBWSxDQUFDQyxjQUFBLEVBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDNUMsRUFBQSxZQUFZLENBQUNDLGNBQUEsRUFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUMxQyxFQUFBLFlBQVksQ0FBQ0UsYUFBQSxFQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQzFDLEVBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0NmQSxDQUFjLFNBQUEsR0FBRyxTQUFTLENBQUM7QUFDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFNBQVMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxnQkFBZ0I7TUFDdEMsSUFBSSxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7VUFDekMsTUFBTSxJQUFJLENBQUM7VUFDWCxLQUFLLEtBQUssQ0FBQztVQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7Q0FDdkIsS0FBSSxPQUFPLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTTtVQUMzQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztNQUMxQyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7VUFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsUUFBUSxDQUFDLEdBQUcsZ0JBQWdCO2NBQ2xELElBQUksT0FBTyxFQUFFO2tCQUNULE9BQU8sR0FBRyxLQUFLLENBQUM7Q0FDaEMsaUJBQWdCLElBQUksR0FBRztDQUN2QixxQkFBb0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3VCQUNYO3NCQUNELElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzBCQUN4QyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0NBQ25DLHFCQUFvQixPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTTswQkFDekIsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3NCQUN6QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQzttQkFDL0I7ZUFDSjtDQUNiLFVBQVMsQ0FBQztDQUNWLFNBQVEsSUFBSTtjQUNBLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztXQUNqQyxDQUFDLE9BQU8sR0FBRyxFQUFFO2NBQ1YsSUFBSSxPQUFPLEVBQUU7a0JBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztDQUNoQyxpQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2VBQ2Y7V0FDSjtDQUNULE1BQUssQ0FBQyxDQUFDO0NBQ1AsRUFBQTs7Ozs7Ozs7Ozs7O0FDbERBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUNyQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0NBQ3hDLE1BQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztPQUN0QixJQUFJLENBQUMsQ0FBQztXQUNGLE9BQU8sQ0FBQyxDQUFDO0NBQ2pCLE1BQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2QsTUFBSSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1dBQzFDLEVBQUUsQ0FBQyxDQUFDO0NBQ1osTUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2hELEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQSxFQUFBLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCO0NBQ0E7Q0FDQSxFQUFBLElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQSxFQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFO0NBQ3RCLE1BQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3pGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO09BQ2hELElBQUksS0FBSyxHQUFHLElBQUk7V0FDWixLQUFLLEdBQUcsRUFBRSxDQUFDO09BQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQztXQUNMLENBQUMsR0FBRyxDQUFDO0NBQ2IsVUFBUSxDQUFDLENBQUM7Q0FDVixNQUFJLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRTtXQUNoQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztDQUNoQyxVQUFRLFFBQVEsQ0FBQztDQUNqQixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzttQkFDekIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7bUJBQ2pCLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07Q0FDdEIsY0FBWSxLQUFLLENBQUM7Q0FDbEIsa0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO21CQUM3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDN0Msa0JBQWdCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7bUJBQ3pCLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07WUFDYjtDQUNULFVBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO2VBQ1YsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztlQUN2RSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1Q7UUFDSjtPQUNELElBQUksQ0FBQyxFQUFFO1dBQ0gsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1dBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDbkIsY0FBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkI7T0FDRCxJQUFJLEtBQUssRUFBRTtDQUNmLFVBQVEsSUFBSSxDQUFDO2VBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzdFLFVBQVEsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCO0NBQ0wsTUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hFLEdBQUMsQ0FBQztBQUNGO0dBQ0EsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFDekM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtDQUN4RCxNQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztPQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDO0NBQ2IsVUFBUSxDQUFDLENBQUM7T0FDTixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRztXQUNoQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDdkMsVUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDN0IsY0FBWSxNQUFNO1dBQ1YsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sU0FBUztDQUN0QyxjQUFZLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0NBQ3pDLFVBQVEsUUFBUSxDQUFDO0NBQ2pCLGNBQVksS0FBSyxDQUFDO21CQUNGLENBQUMsR0FBRyxDQUFDLENBQUM7bUJBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO21CQUMxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO21CQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07Q0FDdEIsY0FBWSxLQUFLLENBQUM7Q0FDbEIsa0JBQWdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDakQsQ0FBQyxHQUFHLENBQUMsQ0FBQzttQkFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGtCQUFnQixNQUFNO0NBQ3RCLGNBQVksS0FBSyxDQUFDO0NBQ2xCLGtCQUFnQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzttQkFDcEMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtZQUNiO1FBQ0o7T0FDRCxJQUFJLENBQUMsS0FBSyxDQUFDO0NBQ2YsVUFBUSxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztDQUNyQyxNQUFJLE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQztDQUMxQixHQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0NBQ3BDLE1BQUksT0FBTyxrRUFBa0UsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUYsQ0FBQTs7Ozs7Ozs7Ozs7Q0N6SUQsQ0FBYyxZQUFBLEdBQUcsWUFBWSxDQUFDO0FBQzlCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFlBQVksR0FBRztBQUN4QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0dBQ3hCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Q0FDdEQsS0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUM7VUFDdkQsRUFBRSxJQUFJLEVBQUU7Q0FDaEIsU0FBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUk7Q0FDekIsTUFBSyxDQUFDLENBQUM7TUFDSCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUU7TUFDL0MsSUFBSSxHQUFHLEtBQUssU0FBUztDQUN6QixTQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1dBQ3BCO1VBQ0QsSUFBSSxFQUFFLEtBQUssU0FBUztjQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztlQUN6QjtjQUNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2tCQUNoQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtzQkFDdEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDM0M7c0JBQ29CLEVBQUUsQ0FBQyxDQUFDO1dBQ2Y7T0FDSjtNQUNELE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO01BQzdDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDckMsSUFBSSxTQUFTLEVBQUU7VUFDWCxJQUFJLElBQUksR0FBRyxFQUFFO2NBQ1QsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNsQixTQUFRLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2NBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztVQUM5QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO0NBQ3hDLGFBQVksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3ZEO01BQ0QsT0FBTyxJQUFJLENBQUM7R0FDZixDQUFBOzs7Ozs7Ozs7O0FDMUVEO0NBQ0EsQ0FBQSxLQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtFQUNBLFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUMxQjtDQUNBO0NBQ0EsS0FBSSxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVcsRUFBRSxDQUFDLFdBQVc7QUFDekQ7VUFDUSxJQUFJLEdBQUcsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Y0FDOUIsR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Y0FDaEMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDakM7VUFDUSxTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ25ELGFBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNiLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtVQUNRLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDbkQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsWUFBWSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztDQUM1RTtVQUNRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQzVFO0NBQ0EsU0FBUSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Y0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztDQUNsQyxhQUFZLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2pCO0FBQ1Q7Q0FDQSxTQUFRLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLGFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakI7QUFDVDtDQUNBO1VBQ1EsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7Q0FDekU7VUFDUSxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUN6RTtDQUNBO0NBQ0EsTUFBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVc7QUFDM0I7VUFDUSxTQUFTLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNsRCxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdkMsYUFBWSxJQUFJLElBQUk7Q0FDcEIsaUJBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztjQUNmLElBQUksR0FBRyxLQUFLLENBQUM7Q0FDekIsaUJBQWdCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDbEcsa0JBQWlCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztrQkFDZixTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzttQkFDL0IsSUFBSSxHQUFHLEdBQUcsc0JBQXNCO0NBQ2pELGlCQUFnQixTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO21CQUNwRCxJQUFJLEdBQUcsR0FBRyxzQkFBc0I7a0JBQ2pDLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO21CQUNqRjtDQUNqQixpQkFBZ0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7c0JBQy9DLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztrQkFDNUUsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztlQUM3RTtXQUNKO0FBQ1Q7Q0FDQSxTQUFRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztDQUMxRSxTQUFRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRTtVQUNRLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Y0FDM0MsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7a0JBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDM0MsaUJBQWdCLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUMsaUJBQWdCLFFBQVEsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO2NBQzlCLE9BQU8sUUFBUSxLQUFLLEdBQUc7Q0FDbkMsbUJBQWtCLFFBQVE7Q0FDMUIsbUJBQWtCLEdBQUc7b0JBQ0gsSUFBSSxHQUFHLFFBQVE7b0JBQ2YsUUFBUSxLQUFLLENBQUM7Q0FDaEMsbUJBQWtCLElBQUksR0FBRyxxQkFBcUIsR0FBRyxRQUFRO0NBQ3pELG1CQUFrQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQztXQUNuRTtBQUNUO0NBQ0EsU0FBUSxPQUFPLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Q0FDdkUsU0FBUSxPQUFPLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkU7Q0FDQSxNQUFLLEdBQUcsQ0FBQztBQUNUO0NBQ0E7Q0FDQSxLQUFJLElBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFLENBQUMsV0FBVztBQUN6RDtVQUNRLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUM1QixHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztjQUNoQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNqQztVQUNRLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDcEQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO1VBQ1EsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNwRCxhQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcs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Q0E7Q0FDQSxDQUFBLFFBQVEsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO01BQ3hDLElBQUksSUFBSSxLQUFLLFFBQVE7VUFDakIsT0FBTyxJQUFJLENBQUM7TUFDaEIsT0FBTyxJQUFJLFFBQVE7VUFDZixFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDL0M7VUFDUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDL0MsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLEdBQUc7TUFDMUMsT0FBTyxNQUFNLENBQUMsWUFBWTtDQUM5QixTQUFRLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFO0NBQ3RCLFNBQVEsSUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Q0FDdEIsTUFBSyxDQUFDO0NBQ04sRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7TUFDOUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7TUFDM0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztDQUM5RCxLQUFJLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLElBQUksTUFBTSxDQUFDLENBQUM7TUFDMUQsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7TUFDOUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO01BQzFCLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7Q0FDOUQsS0FBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxDQUFD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SSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7R0FDbEI7QUFDRDtDQUNBO0VBQ0EsU0FBUyxJQUFJLEdBQUcsRUFBRTtBQUNsQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0dBQzdCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLE1BQU0sR0FBRztBQUNsQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNDO0FBQ0Q7Q0FDQSxDQUFBLElBQUksTUFBTSxHQUFHLFNBQVMsTUFBTSxHQUFHO01BQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU07WUFDWixTQUFTLG1CQUFtQixHQUFHO2NBQzdCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsYUFBYSxHQUFHO0NBQzdELGlCQUFnQixPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7Q0FDMUMsY0FBYSxHQUFHLENBQUM7V0FDUjtDQUNUO1lBQ1UsU0FBUyxZQUFZLEdBQUc7Q0FDbEMsYUFBWSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7Q0FDaEMsVUFBUyxDQUFDO0NBQ1YsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7TUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Q0FDaEMsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSztNQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3JELEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ3RELEtBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7TUFDaEIsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQSxDQUFBLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO01BQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0dBQ3hCO0FBQ0Q7Q0FDQSxDQUFBLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3RDLEtBQUksT0FBTyxHQUFHLEdBQUcsR0FBRyxFQUFFO1VBQ2QsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7VUFDN0IsR0FBRyxNQUFNLENBQUMsQ0FBQztPQUNkO0NBQ0wsS0FBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0dBQ2xCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDNUIsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNuQixLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0NBQzFCLEtBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7R0FDbEI7QUFDRDtFQUNBLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDakQsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUM7QUFDdEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFO0NBQ3ZEO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUTtDQUMxRCxTQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssS0FBSyxDQUFDO29CQUNWLEdBQUcsU0FBUyxDQUFDO0NBQy9CLFdBQVUsS0FBSyxHQUFHLEtBQUssT0FBTyxDQUFDO0NBQy9CLFdBQVUsS0FBSyxHQUFHLE9BQU8sS0FBSyxDQUFDO0NBQy9CLFdBQVUsS0FBSyxHQUFHLFNBQVMsR0FBRyxDQUFDO0NBQy9CLCtCQUE4QixDQUFDO0NBQy9CLEtBQUksS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ1osT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7TUFDakQsT0FBTyxLQUFLLEdBQUcsQ0FBQztDQUNwQixXQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ25FLFdBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUM3QixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7Q0FDdkQsS0FBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDekQsRUFBQyxDQUFDO0FBQ0Y7Q0FDQSxDQUFBLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3RDLEtBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFO0NBQ25CLFNBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3hDLFNBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNyRCxTQUFRLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ2pCO0NBQ0wsS0FBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFO0NBQ3pCLFNBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1VBQ2hDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7T0FDekI7TUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO0dBQ3ZCO0FBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7TUFDbkQsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNwQyxLQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQzFELEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNqRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtDQUN2RCxLQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Q0FDL0MsS0FBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztDQUMxRCxFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Q0FDbkQsS0FBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ25ELEVBQUMsQ0FBQztBQUNGO0NBQ0EsQ0FBQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUNqQyxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQztDQUN0QyxLQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUM7Q0FDdEMsS0FBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDO01BQ2xDLEdBQUcsQ0FBQyxHQUFH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SUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFBO01BQ3JEO0VBQ0Y7Ozs7Ozs7O0NDekJELENBQWMsSUFBQSxHQUFHLElBQUksQ0FBQztBQUN0QjtDQUNBO0NBQ0E7Q0FDQTtFQUNBLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNoQjtFQUNBLElBQUk7Q0FDSixHQUFFLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDO0NBQ3hFLEtBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtDQUNob0MsSUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7R0FDbEIsQ0FBQyxPQUFPLENBQUMsRUFBRTtDQUNaO0dBQ0M7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUNuQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdkI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztHQUM5QjtBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtD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LElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7TUFDckQsR0FBRyxJQUFJLE1BQU0sQ0FBQztNQUNkLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDekUsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLGFBQWEs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QUE7Q0FDekMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtDQUNsQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtDQUMxQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0NBQ3RDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtDQUNwQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO0NBQy9CLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7Q0FDaEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDeEMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtDQUNwQyxZQUFBLE1BQU0sQ0FB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QUFFO0NBQy9CLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0NBQy9DLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7Q0FDMUIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Q0FDMUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLENBQUMsRUFBRTtDQUNoQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtDQUNoRCxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO0NBQzFCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQzFDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7Q0FDekIsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7Q0FDekMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtDQUMzQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtDQUMzQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO0NBQ3RCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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
|