@magic-xpa/angular 4.1100.0-dev4110.165 → 4.1100.0-dev4110.167

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.
@@ -219,23 +219,18 @@ export class MgformatMagicDirective {
219
219
  const dateArray = userInput.split(separator);
220
220
  const [day, month, year] = this.getDateSegments1(dateArray);
221
221
  const isMonthInNumber = !isNaN(Number(month));
222
- if (isMonthInNumber == true) {
223
- if (day < 32 && Number(month) < 13) {
224
- this.updateYear(day, month, year, separator, century, centuryVal, control);
225
- }
226
- }
227
- else if (day < 32) {
222
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
228
223
  this.updateYear(day, month, year, separator, century, centuryVal, control);
229
224
  }
230
225
  }
231
- else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy')) {
226
+ else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy' || dateFormat == 'd/M/yyyy' || dateFormat == 'd-M-yyyy')) {
232
227
  const dateArray = userInput.split(separator);
233
228
  const [day, month, year] = this.getDateSegments1(dateArray);
234
229
  if ((day < 32 && month < 13)) {
235
230
  this.updateYear(day, month, year, separator, century, centuryVal, control);
236
231
  }
237
232
  }
238
- else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy')) {
233
+ else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy' || dateFormat == 'M/d/yyyy' || dateFormat == 'M-d-yyyy')) {
239
234
  const dateArray = userInput.split(separator);
240
235
  const [day, month, year] = this.getDateSegments2(dateArray);
241
236
  if ((day < 32 && month < 13)) {
@@ -246,12 +241,7 @@ export class MgformatMagicDirective {
246
241
  const dateArray = userInput.split(separator);
247
242
  const [day, month, year] = this.getDateSegments2(dateArray);
248
243
  const isMonthInNumber = !isNaN(Number(month));
249
- if (isMonthInNumber == true) {
250
- if (day < 32 && Number(month) < 13) {
251
- this.updateYear(day, month, year, separator, century, centuryVal, control);
252
- }
253
- }
254
- else if (day < 32) {
244
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
255
245
  this.updateYear(day, month, year, separator, century, centuryVal, control);
256
246
  }
257
247
  }
@@ -273,23 +263,18 @@ export class MgformatMagicDirective {
273
263
  const dateArray = userInput.split(separator);
274
264
  const [day, month, year] = this.getDateSegments4(dateArray);
275
265
  const isMonthInNumber = !isNaN(Number(month));
276
- if (isMonthInNumber == true) {
277
- if (day < 32 && Number(month) < 13) {
278
- this.updateYear(day, month, year, separator, century, centuryVal, control);
279
- }
280
- }
281
- else if (day < 32) {
266
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
282
267
  this.updateYear(day, month, year, separator, century, centuryVal, control);
283
268
  }
284
269
  }
285
- else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy')) {
270
+ else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy' || dateFormat == 'd/M/yy' || dateFormat == 'd-M-yy')) {
286
271
  const dateArray = userInput.split(separator);
287
272
  const [day, month, year] = this.getDateSegments1(dateArray);
288
273
  if ((day < 32 && month < 13)) {
289
274
  this.updateYear(day, month, year, separator, century, centuryVal, control);
290
275
  }
291
276
  }
292
- else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy')) {
277
+ else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy' || dateFormat == 'M/d/yy' || dateFormat == 'M-d-yy')) {
293
278
  const dateArray = userInput.split(separator);
294
279
  const [day, month, year] = this.getDateSegments2(dateArray);
295
280
  if ((day < 32 && month < 13)) {
@@ -313,24 +298,43 @@ export class MgformatMagicDirective {
313
298
  else if ((dateFormat == 'dd/MMM/yy' || dateFormat == 'dd-MMM-yy')) {
314
299
  const dateArray = userInput.split(separator);
315
300
  const [day, month, year] = this.getDateSegments1(dateArray);
316
- if ((day < 32 && month < 13)) {
301
+ const isMonthInNumber = !isNaN(Number(month));
302
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
317
303
  this.updateYear(day, month, year, separator, century, centuryVal, control);
318
304
  }
319
305
  }
320
306
  else if ((dateFormat == 'yy/dd/MMM' || dateFormat == 'yy-dd-MMM')) {
321
307
  const dateArray = userInput.split(separator);
322
308
  const [day, month, year] = this.getDateSegments4(dateArray);
323
- if ((day < 32 && month < 13)) {
309
+ const isMonthInNumber = !isNaN(Number(month));
310
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
324
311
  this.updateYear(day, month, year, separator, century, centuryVal, control);
325
312
  }
326
313
  }
327
314
  else if ((dateFormat == 'MMM/dd/yy' || dateFormat == 'MMM-dd-yy')) {
328
315
  const dateArray = userInput.split(separator);
329
316
  const [day, month, year] = this.getDateSegments2(dateArray);
330
- if ((day < 32 && month < 13)) {
317
+ const isMonthInNumber = !isNaN(Number(month));
318
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
319
+ this.updateYear(day, month, year, separator, century, centuryVal, control);
320
+ }
321
+ }
322
+ else if ((dateFormat == 'yyyy/MMM/dd' || dateFormat == 'yyyy-MMM-dd' || dateFormat == 'yy/MMM/dd' || dateFormat == 'yy-MMM-dd')) {
323
+ const dateArray = userInput.split(separator);
324
+ const [day, month, year] = this.getDateSegments3(dateArray);
325
+ const isMonthInNumber = !isNaN(Number(month));
326
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
331
327
  this.updateYear(day, month, year, separator, century, centuryVal, control);
332
328
  }
333
329
  }
330
+ else if (dateFormat == 'yyyy/MM' || dateFormat == 'yyyy-MM') {
331
+ const dateArray = userInput.split(separator);
332
+ const month = dateArray[1];
333
+ const year = Number(dateArray[0]);
334
+ if (Number(month) < 13) {
335
+ this.updateYear(1, month, year, separator, century, centuryVal, control);
336
+ }
337
+ }
334
338
  }
335
339
  updateYear(day, month, year, separator, century, centuryVal, control) {
336
340
  let updatedYear = year.toString().length === 2 ? (year < century % 100 ? centuryVal + 1 : centuryVal) + '' + year :
@@ -563,4 +567,4 @@ MgformatMagicDirective.ɵdir = i0.ɵɵdefineDirective({ type: MgformatMagicDirec
563
567
  type: HostListener,
564
568
  args: ['change', ['$event']]
565
569
  }] }); })();
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFTbEUsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUNZLFFBQXdCLEVBQ3hCLEtBQXVCO1FBRHZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBUG5DLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBUzNCLENBQUM7SUFFTCxlQUFlO1FBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUVoRixJQUFH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QUM7cUJBQzlCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLEVBQUU7Z0JBQ3RYLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFDdkIsS0FBSyxDQUFD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LElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtB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RUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUM7WUFDbEUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsTUFBTSxlQUFlLEdBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFdkQsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO2dCQUMzQixJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDNUU7YUFDRjtpQkFBSyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBQztZQUM5RCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxH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c0JBQXNCO2NBTGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTthQUN2QjtnR0FxQ1EsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFNakMsT0FBTztrQkFETixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQVkxQixZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQW1MMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrLm1hZ2ljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7TWFnaWNEaXJlY3RpdmV9IGZyb20gJy4vbWFnaWMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtNZ0RhdGVGb3JtYXR0ZXJ9IGZyb20gJy4uL3BpcGVzL2RhdGUubWFnaWMucGlwZSc7XHJcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtFbnZpcm9ubWVudCwgTGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuLyoqXHJcbiAqIFBlcmZvcm0gTWFnaWMgdmFsaWRhdGlvbiBvbiBpbnB1dCBjb250cm9scyB3aGljaCBob2xkIGFscGhhbnVtZXJpYyBzdHJpbmdzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttZ0Zvcm1hdF0nXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1nZm9ybWF0TWFnaWNEaXJlY3RpdmUge1xyXG5cclxuICBkYXRlUGFzdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBtYWdpY0RpcjogTWFnaWNEaXJlY3RpdmUgLFxyXG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrTWFnaWNTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICYmIHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIGZpcnN0IGRhdGUgY29udHJvbCdzIGZvcm1hdC5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGlmIChwaWMuZ2V0QXR0cigpID09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdERhdGUocGljKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvKipcclxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBwYXR0ZXJuXHJcbiAgICogT24gaW5wdXQsIHZlcmlmaWVzIHRoZSBpbnB1dCBtYXRjaGVzIHRoZSByZXF1aXJlZCBtYXNrXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkZvY3VzRXZlbnQoJGV2ZW50KXtcclxuICAgIHRoaXMuY2FsY3VsYXRlUGF0dGVybigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZmxhZyBpcyBuZWVkZWQgdG8gc2tpcCBleGVjdXRpb24gb2YgZGF0ZU1hc2tpbmcoKSBtZXRob2Qgd2hlbiB1c2VyIHBhc3RlIGRhdGUgaW4gaW5wdXQgY29udHJvbC5cclxuICAgICAqIFRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiBpcyBEQVRFLiBCdXQgdG8gY2hlY2sgdHlwZSBvZiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiwgd2VcclxuICAgICBuZWVkIHRvIGV4ZWN1dGUgZ2V0Q29udHJvbE1ldGFkYXRhKCkgbWV0aG9kLiBTbywgdG8gcmVkdWNlIHRoaXMgZXhlY3V0aW9uIG92ZXJsb2FkIHdlIHNldFxyXG4gICAgIFwiZGF0ZVBhc3RlRmxhZ1wiIGRpcmVjdGx5LlxyXG4gICAgICovXHJcbiAgICB0aGlzLmRhdGVQYXN0ZUZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbklucHV0RXZlbnQoZXZlbnQpe1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpe1xyXG4gICAgICBpZighdGhpcy5kYXRlUGFzdGVGbGFnKVxyXG4gICAgICAgIHRoaXMuZGF0ZU1hc2tpbmcoZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUGFzdGVGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhdHRlcm4oKTtcclxuICB9XHJcblxyXG5cclxuICAvL1RoaXMgbWV0aG9kIGluc2VydHMgJy8nIGFzIGEgc2VwYXJhdG9yIHdoaWxlIGVudGVyaW5nIGRhdGUgaW4gdGhlIHRleHRib3guXHJcbiAgLy9FeGFtcGxlOiAxMC8xMC8yMDIzXHJcbiAgZGF0ZU1hc2tpbmcoZXZlbnQpe1xyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGN1cnNvclBvcyA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQuaW5jbHVkZXMoJy8nKT8gJy8nOictJztcclxuXHJcbiAgICBpZihjdXJzb3JQb3MgPj0gaW5wdXQudmFsdWUubGVuZ3RoKSB7XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05Ly1dL2csICcnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXl5eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS9kZC95eXl5XCIgfHx0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU0teXl5eVwiIHx8dGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcIk1NLWRkLXl5eXlcIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAxJyArIHNlcGFyYXRvcjtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gMiAmJiB2YWx1ZVsxXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IDAgKyB2YWx1ZTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSAzICYmIHZhbHVlWzJdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMikgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoNSk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPj0gMTApXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDEwKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXl5eS9kZC9NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LU1NLWRkXCIgfHwgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXktZGQtTU1cIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMClcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTApO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvZGQvTU1cIiB8fHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJkZC1NTS15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1NTS1kZFwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS1kZC15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTVwiKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwMScgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA1ICYmIHZhbHVlWzRdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMykgKyAnMCcgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA2ICYmIHZhbHVlWzVdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDgpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDgpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJkZC9NTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiZGQvTU1NL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMScgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT1cInl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTU1cIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMCcgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDkpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJ5eXl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LWRkLU1NTVwiICkge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMSlcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTEpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJNTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAxJyArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiTU1NL2RkL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMyk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNSAmJiB2YWx1ZVs0XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMDEnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNiAmJiB2YWx1ZVs1XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMCcgKyB2YWx1ZS5zbGljZSg0KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihjdXJzb3JQb3MgPCBpbnB1dC52YWx1ZS5sZW5ndGggJiYgaW5wdXQudmFsdWUubGVuZ3RoID4gdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdC5sZW5ndGgpe1xyXG4gICAgICBsZXQgaW5wdXREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIGxldCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0LTE7XHJcbiAgICAgIGxldCBlbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQtMTtcclxuICAgICAgbGV0IGluZGV4VG9SZW1vdmUgPSBpbnB1dC5zZWxlY3Rpb25TdGFydC0xO1xyXG5cclxuICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dERhdGUuc2xpY2UoMCxpbmRleFRvUmVtb3ZlKSArIGlucHV0RGF0ZS5zbGljZShpbmRleFRvUmVtb3ZlICsgMSk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudCl7XHJcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuX3Rhc2suZ2V0Rm9ybUNvbnRyb2wodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCApO1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBjb25zdCBjZW50dXJ5ID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KGV2ZW50LnRhcmdldC52YWx1ZSwgY2VudHVyeSwgY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0IHllYXIsIGlmIHVzZXIgZW50ZXJzIDIgZGlnaXRzIGluc3RlYWQgb2YgNCBkaWdpdHMgYXMgcGVyIHRoZSBjZW50dXJ5IGdpdmVuIGluIE1hZ2ljLmluaSBmaWxlICovXHJcbiAgZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KHVzZXJJbnB1dDogc3RyaW5nLCBjZW50dXJ5OiBudW1iZXIsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQ7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB1c2VySW5wdXQuaW5jbHVkZXMoJy8nKSA/ICcvJyA6IFwiLVwiO1xyXG4gICAgbGV0IGNlbnR1cnlWYWwgPSBwYXJzZUludChjZW50dXJ5LnRvU3RyaW5nKCkuc2xpY2UoMCwgMikpO1xyXG4gICAgaWYodXNlcklucHV0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gO1xyXG5cclxuICAgIGlmICgoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NTS15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG5cclxuICAgICAgaWYgKGlzTW9udGhJbk51bWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZiAoZGF5IDwgMzIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdkZC9NTS95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTS1kZC15eXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMihkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmICgoZGF0ZUZvcm1hdCA9PSAnTU1NL2RkL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG5cclxuICAgICAgaWYgKGlzTW9udGhJbk51bWJlciA9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9ZWxzZSBpZiAoZGF5IDwgMzIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L01NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NLWRkJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L2RkL01NJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LWRkLU1NJykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmICgoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L2RkL01NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXl5eS1kZC1NTU0nKSkge1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBjb25zdCBpc01vbnRoSW5OdW1iZXI6IGJvb2xlYW4gPSAhaXNOYU4oTnVtYmVyKG1vbnRoKSk7XHJcblxyXG4gICAgICBpZiAoaXNNb250aEluTnVtYmVyID09IHRydWUpIHtcclxuICAgICAgICBpZiAoZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNlIGlmIChkYXkgPCAzMikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NLWRkLXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMihkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eS9NTS9kZCcgfHwgZGF0ZUZvcm1hdCA9PSAneXktTU0tZGQnKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMzKGRhdGVBcnJheSk7XHJcblxyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5L2RkL01NJyB8fCBkYXRlRm9ybWF0ID09ICd5eS1kZC1NTScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTU0teXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSk7XHJcblxyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5L2RkL01NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXktZGQtTU1NJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG5cclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuXHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVZZWFyKGRheTpudW1iZXIsIG1vbnRoOnN0cmluZywgeWVhcjpudW1iZXIsIHNlcGFyYXRvcjpzdHJpbmcsIGNlbnR1cnk6bnVtYmVyLCBjZW50dXJ5VmFsOm51bWJlciwgY29udHJvbDpBYnN0cmFjdENvbnRyb2wpe1xyXG4gICAgbGV0IHVwZGF0ZWRZZWFyID0geWVhci50b1N0cmluZygpLmxlbmd0aCA9PT0gMiA/ICh5ZWFyIDwgY2VudHVyeSAlIDEwMCA/IGNlbnR1cnlWYWwgKyAxIDogY2VudHVyeVZhbCkgKyAnJyArIHllYXIgOlxyXG4gICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gKHllYXIgPCBjZW50dXJ5ICUgMTAwID8gY2VudHVyeVZhbCArIDEgOiBjZW50dXJ5VmFsKSArICcwJyArIHllYXIgOlxyXG4gICAgICAgIHllYXI7XHJcblxyXG4gICAgY29udHJvbC5zZXRWYWx1ZShuZXcgRGF0ZShgJHt1cGRhdGVkWWVhcn0ke3NlcGFyYXRvcn0ke21vbnRofSR7c2VwYXJhdG9yfSR7ZGF5fWApKVxyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsxXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzJdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzFdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzBdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIGdldERhdGVTZWdtZW50czMoZGF0ZUFycmF5KXtcclxuICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgY29uc3QgbW9udGggPSBkYXRlQXJyYXlbMV07XHJcbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVsxXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsyXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgY2FsY3VsYXRlUGF0dGVybiAoKVxyXG4gIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICkge1xyXG4gICAgICBsZXQgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX3Rhc2suUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YSh0aGlzLm1hZ2ljRGlyLmlkKS5kYXRhVHlwZTtcclxuICAgICAgaWYgKGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1BhdHRlcm5HZW5lcmF0aW9uTmVlZGVkKGF0dHIsIHBpYykpIHtcclxuICAgICAgICAgIGxldCBwYXR0ZXJuOiBzdHJpbmcgPSB0aGlzLmdlbmVyYXRlUGF0dGVybihhdHRyLCBwaWMpO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnBhdHRlcm4ocGF0dGVybikpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW2NvbnRyb2wudmFsaWRhdG9yLCBWYWxpZGF0b3JzLnBhdHRlcm4ocGF0dGVybildKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvciA9PSBudWxsKVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHJlLXNldCBhbGwgdmFsaWRhdG9ycyBhZ2FpblxyXG4gICAgICAgICAgICAgIGlmIChwaWMuaXNGb3JtYXRFeHAoKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLm1hZ2ljRGlyLnJvd0lkKSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tYWdpY0Rpci5yb3dJZCA9ICcwJztcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIHRoaXMuX3Rhc2suY3VzdG9tVmFsaWRhdG9yKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQpXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSkpO1xyXG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKHBpYzogUElDKTogdm9pZCB7XHJcbiAgICBsZXQgbWdEYXRlRm9ybWF0dGVyID0gbmV3IE1nRGF0ZUZvcm1hdHRlcigpO1xyXG4gICAgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9IG1nRGF0ZUZvcm1hdHRlci5Db252ZXJ0TWdEYXRlRm9ybWF0VG9Bbmd1bGFyKHBpYy5nZXRNYXNrKCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZm9ybWF0QWxwaGFVbmljb2RlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmcgPSBjb250cm9sLnZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG5ld1ZhbHVlOiBzdHJpbmcgPSB0aGlzLl90YXNrLkdldFJhbmdlZFZhbHVlKHRoaXMubWFnaWNEaXIuaWQsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAgIGxldCBwaWM6IFBJQyA9IHRoaXMuX3Rhc2suR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMubWFnaWNEaXIuaWQpO1xyXG4gICAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQ29kZUF0KGkpKSB7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICAgICAgdmFsdWVTdHIuQXBwZW5kKHZhbHVlLmNoYXJBdChpKS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlU3RyLlRvU3RyaW5nKCkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRCb29sZWFuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkICB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUgKHRoaXMubWFnaWNEaXIuaWQgLCB2YWx1ZSk7XHJcbiAgICAgIGlmIChuZXdWYWx1ZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgodmFsdWUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZnJvbSAgZmxkJ3MgIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2VuZXJhdGVQYXR0ZXJuIChhdHRyaWJ1dGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYzogUElDKTogc3RyaW5nIHtcclxuICAgIGxldCBwYXR0ZXJuOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZSlcclxuICAgIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yTnVtYmVyKHBpYyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcGF0dGVybiA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuRm9yQWxwaGEocGljKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGF0dGVybjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZm9yIEFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhdHRlcm5TdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlciAoKTtcclxuXHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZCgnXicpO1xyXG4gICAgaWYgKHBpYy5pc05lZ2F0aXZlKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kKCctPycpO1xyXG4gICAgaWYgKHBpYy5nZXRXaG9sZXMoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmRGb3JtYXQoJ1xcXFxke3swfSx7MX19JywgMCwgcGljLmdldFdob2xlcygpKTtcclxuICAgIGlmIChwaWMuZ2V0RGVjKCkpXHJcbiAgICAgIHBhdHRlcm5TdHIuQXBwZW5kRm9ybWF0KCcoXFxcXC5cXFxcZHsxLHswfX0pPycsIHBpYy5nZXREZWMoKSk7XHJcbiAgICBwYXR0ZXJuU3RyLkFwcGVuZCgnJCcpO1xyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuU3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaXNQYXR0ZXJuR2VuZXJhdGlvbk5lZWRlZCAoYXR0ciA6IFN0b3JhZ2VBdHRyaWJ1dGUsIHBpYyA6IFBJQyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIHN3aXRjaCAoYXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcmV0dXJuIChwaWMuZ2V0TWFza0NoYXJzKCkgPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdlbmVyYXRlIHBhdHRlcm4gZm9yIEFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMgOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNudDogbnVtYmVyID0gMDtcclxuICAgIGxldCBpbnB1dEFsbENoYXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgY2xvc2VTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCAgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCAgcGF0dGVybjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcblxyXG4gICAgcGF0dGVybi5BcHBlbmQoJ14nKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBtYXNrLmxlbmd0aDspXHJcbiAgICB7XHJcbiAgICAgIC8vc3RhcnQgbmV3IHN1YnNldCAsIGlmIG1hc2tbaV0gaXMgb25lIG9mIHRoZXNlLlxyXG4gICAgICBpZiAoaW5wdXRBbGxDaGFycyAmJiAobWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfTiB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19VIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX0xcclxuICAgICAgICB8fCBtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19YKSlcclxuICAgICAge1xyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kKCcoJyk7XHJcbiAgICAgICAgY2xvc2VTZXQgPSB0cnVlO1xyXG4gICAgICAgIGlucHV0QWxsQ2hhcnMgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY250ID0gMDtcclxuICAgICAgc3dpdGNoIChtYXNrLmNoYXJDb2RlQXQoaSkpXHJcbiAgICAgIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWDpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTDpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZCgnLicpO1xyXG4gICAgICAgICAgbGV0IGlucHV0QWxsQ2hhcnNSZWY6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgICAgICAgIGxldCBkaXJzOiBzdHJpbmcgPSAgUElDSW50ZXJmYWNlLlBJQ19VLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpO1xyXG4gICAgICAgICAgZGlycyArPSBQSUNJbnRlcmZhY2UuUElDX1gudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGNudCA9IHRoaXMuZ2V0RGlyZWN0aXZlQ291bnQobWFzaywgaSwgZGlycywgaW5wdXRBbGxDaGFyc1JlZik7XHJcbiAgICAgICAgICBpbnB1dEFsbENoYXJzID0gaW5wdXRBbGxDaGFyc1JlZi52YWx1ZTtcclxuICAgICAgICAgIGkgKz0gY250O1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTjpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZCgnXFxcXGQnKTtcclxuICAgICAgICAgIGxldCBpbnB1dEFsbENoYXJzUmVmOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcbiAgICAgICAgICBjbnQgPSB0aGlzLmdldERpcmVjdGl2ZUNvdW50KG1hc2ssIGksIFBJQ0ludGVyZmFjZS5QSUNfTC50b1N0cmluZygpLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICAgIGlucHV0QWxsQ2hhcnMgPSBpbnB1dEFsbENoYXJzUmVmLnZhbHVlO1xyXG4gICAgICAgICAgaSArPSBjbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBwYXR0ZXJuLkFwcGVuZChtYXNrW2ldKTtcclxuICAgICAgICAgIGkrKztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjbnQgPiAwKVxyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kRm9ybWF0KCd7ezB9LHsxfX0nLCBpbnB1dEFsbENoYXJzID8gY250IDogMCwgY250KTtcclxuICAgICAgaWYgKGNsb3NlU2V0KVxyXG4gICAgICAgIHBhdHRlcm4uQXBwZW5kKCcpJyk7XHJcbiAgICAgIGNsb3NlU2V0ID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG4gICAgcGF0dGVybi5BcHBlbmQoJyQnKTtcclxuICAgIHJldHVybiBwYXR0ZXJuLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0RGlyZWN0aXZlQ291bnQobWFzazogc3RyaW5nLCBpZHg6IG51bWJlciwgcGF0dGVybjogc3RyaW5nLCBjaGFuZ2VJblBhdHRlcm46IFJlZlBhcmFtPGJvb2xlYW4+ICk6IG51bWJlciAge1xyXG5cclxuICAgIGNoYW5nZUluUGF0dGVybi52YWx1ZSA9IGZhbHNlO1xyXG4gICAgbGV0IHBhdHRlcm5Db3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvLyBmaW5kIG1heCBjaGFyc1xyXG4gICAgd2hpbGUgKGlkeCA8IG1hc2subGVuZ3RoICYmIHRoaXMuSXNQYXR0ZXJuTWF0Y2hlcyhtYXNrLmNoYXJDb2RlQXQoaWR4KS50b1N0cmluZygpLCBwYXR0ZXJuKSlcclxuICAgIHsgcGF0dGVybkNvdW50Kys7IGlkeCsrOyB9XHJcblxyXG5cclxuICAgIGlmIChpZHggPCBtYXNrLmxlbmd0aClcclxuICAgICAgY2hhbmdlSW5QYXR0ZXJuLnZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcGF0dGVybkNvdW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIElzUGF0dGVybk1hdGNoZXMobWFzazogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aDsgaSsrKVxyXG4gICAgICBpZiAobWFzayA9PSBwYXR0ZXJuW2ldKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
570
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWdmb3JtYXQubWFnaWMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvdWkvZGlyZWN0aXZlcy9tZ2Zvcm1hdC5tYWdpYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBa0IsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFTbEUsTUFBTSxPQUFPLHNCQUFzQjtJQU9qQyxZQUNZLFFBQXdCLEVBQ3hCLEtBQXVCO1FBRHZCLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBUG5DLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBUzNCLENBQUM7SUFFTCxlQUFlO1FBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUVoRixJQUFHLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUU7WUFFMUQsSUFBSSxHQUFHLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRztnQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QjtTQUNGO0lBQ0gsQ0FBQztJQVdNLFlBQVksQ0FBQyxNQUFNO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHRCxPQUFPLENBQUMsS0FBcUI7UUFPM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUdNLFlBQVksQ0FBQyxLQUFLO1FBQ3ZCLElBQUksSUFBSSxHQUFxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDdEcsSUFBSSxJQUFJLElBQUksZ0JBQWdCLENBQUMsSUFBSSxFQUFDO1lBQ2hDLElBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYTtnQkFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFLRCxXQUFXLENBQUMsS0FBSztRQUVmLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDNUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFDO1FBRXRFLElBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBRWxDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXpELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLEVBQUU7Z0JBQzlMLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDeEIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUVwQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksWUFBWSxFQUFFO2dCQUN2TSxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUMzQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7cUJBQzlCLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hDLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxVQUFVLEVBQUU7Z0JBQ3RYLElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQzNDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQztxQkFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUztvQkFDakQsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO3FCQUNyQixJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNqRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNyRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNwRCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTO29CQUNoRCxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFFLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN6RCxJQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztvQkFDdkIsS0FBSyxDQUFD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LElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3JELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVM7b0JBQ2hELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzFELElBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFO29CQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBRXBDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBRyxXQUFXLElBQUksSUFBSSxDQUFDLEtB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QUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFlBQVksSUFBSSxVQUFVLElBQUksWUFBWSxDQUFDLEVBQUU7WUFDbkUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLGFBQWEsSUFBSSxVQUFVLElBQUksYUFBYSxDQUFDLEVBQUU7WUFDckUsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsTUFBTSxlQUFlLEdBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLGVBQWUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDekYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM1RTtTQUVGO2FBQUssSUFBRyxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksUUFBUSxJQUFJLFVBQVUsSUFBSSxRQUFRLENBQUMsRUFBQztZQUNsSCxNQUFNLFNBQVMsR0FBYSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1RCxJQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDNUU7U0FFRjthQUFLLElBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLEVBQUM7WUFDbEgsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUM7WUFDOUQsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVFO1NBRUY7YUFBSyxJQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUM7WUFDOUQsTUFBTSxTQUFTLEdBQWEsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVB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QyxLQUFLLElBQUksQ0FBQyxHQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs0RkE1cEJVLHNCQUFzQjsyREFBdEIsc0JBQXNCO3lHQUF0Qix3QkFBb0Isd0ZBQXBCLG1CQUFlLHdGQUFmLHdCQUFvQiwwRkFBcEIseUJBQXFCOzt1RkFBckIsc0JBQXNCO2NBTGxDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTthQUN2QjtnR0FxQ1EsWUFBWTtrQkFEbEIsWUFBWTttQkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFNakMsT0FBTztrQkFETixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQVkxQixZQUFZO2tCQURsQixZQUFZO21CQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQW1MMUIsYUFBYTtrQkFEbkIsWUFBWTttQkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUYXNrTWFnaWNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXNrLm1hZ2ljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdHJpbmdCdWlsZGVyLCBSZWZQYXJhbX0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1BJQ0ludGVyZmFjZSwgU3RvcmFnZUF0dHJpYnV0ZX0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7TWFnaWNEaXJlY3RpdmV9IGZyb20gJy4vbWFnaWMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQSUN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtNZ0RhdGVGb3JtYXR0ZXJ9IGZyb20gJy4uL3BpcGVzL2RhdGUubWFnaWMucGlwZSc7XHJcbmltcG9ydCB7aXNVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtFbnZpcm9ubWVudCwgTGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS9lbmdpbmVcIjtcclxuLyoqXHJcbiAqIFBlcmZvcm0gTWFnaWMgdmFsaWRhdGlvbiBvbiBpbnB1dCBjb250cm9scyB3aGljaCBob2xkIGFscGhhbnVtZXJpYyBzdHJpbmdzXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1ttZ0Zvcm1hdF0nXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIE1nZm9ybWF0TWFnaWNEaXJlY3RpdmUge1xyXG5cclxuICBkYXRlUGFzdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBtYWdpY0RpcjogTWFnaWNEaXJlY3RpdmUgLFxyXG4gICAgcHJvdGVjdGVkIF90YXNrOiBUYXNrTWFnaWNTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBjb250cm9sID0gdGhpcy5fdGFzay5nZXRGb3JtQ29udHJvbCh0aGlzLm1hZ2ljRGlyLnJvd0lkLCB0aGlzLm1hZ2ljRGlyLmlkICk7XHJcblxyXG4gICAgaWYoY29udHJvbCAhPSBudWxsICYmIHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gbnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIGZpcnN0IGRhdGUgY29udHJvbCdzIGZvcm1hdC5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGlmIChwaWMuZ2V0QXR0cigpID09IFN0b3JhZ2VBdHRyaWJ1dGUuREFURSApIHtcclxuICAgICAgICB0aGlzLmZvcm1hdERhdGUocGljKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICAvKipcclxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBwYXR0ZXJuXHJcbiAgICogT24gaW5wdXQsIHZlcmlmaWVzIHRoZSBpbnB1dCBtYXRjaGVzIHRoZSByZXF1aXJlZCBtYXNrXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbkZvY3VzRXZlbnQoJGV2ZW50KXtcclxuICAgIHRoaXMuY2FsY3VsYXRlUGF0dGVybigpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZmxhZyBpcyBuZWVkZWQgdG8gc2tpcCBleGVjdXRpb24gb2YgZGF0ZU1hc2tpbmcoKSBtZXRob2Qgd2hlbiB1c2VyIHBhc3RlIGRhdGUgaW4gaW5wdXQgY29udHJvbC5cclxuICAgICAqIFRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiBpcyBEQVRFLiBCdXQgdG8gY2hlY2sgdHlwZSBvZiBcIlN0b3JhZ2VBdHRyaWJ1dGVcIiwgd2VcclxuICAgICBuZWVkIHRvIGV4ZWN1dGUgZ2V0Q29udHJvbE1ldGFkYXRhKCkgbWV0aG9kLiBTbywgdG8gcmVkdWNlIHRoaXMgZXhlY3V0aW9uIG92ZXJsb2FkIHdlIHNldFxyXG4gICAgIFwiZGF0ZVBhc3RlRmxhZ1wiIGRpcmVjdGx5LlxyXG4gICAgICovXHJcbiAgICB0aGlzLmRhdGVQYXN0ZUZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBvbklucHV0RXZlbnQoZXZlbnQpe1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkRBVEUpe1xyXG4gICAgICBpZighdGhpcy5kYXRlUGFzdGVGbGFnKVxyXG4gICAgICAgIHRoaXMuZGF0ZU1hc2tpbmcoZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5kYXRlUGFzdGVGbGFnID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGN1bGF0ZVBhdHRlcm4oKTtcclxuICB9XHJcblxyXG5cclxuICAvL1RoaXMgbWV0aG9kIGluc2VydHMgJy8nIGFzIGEgc2VwYXJhdG9yIHdoaWxlIGVudGVyaW5nIGRhdGUgaW4gdGhlIHRleHRib3guXHJcbiAgLy9FeGFtcGxlOiAxMC8xMC8yMDIzXHJcbiAgZGF0ZU1hc2tpbmcoZXZlbnQpe1xyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgbGV0IGN1cnNvclBvcyA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcclxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQuaW5jbHVkZXMoJy8nKT8gJy8nOictJztcclxuXHJcbiAgICBpZihjdXJzb3JQb3MgPj0gaW5wdXQudmFsdWUubGVuZ3RoKSB7XHJcblxyXG4gICAgICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05Ly1dL2csICcnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXl5eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS9kZC95eXl5XCIgfHx0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU0teXl5eVwiIHx8dGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcIk1NLWRkLXl5eXlcIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAxJyArIHNlcGFyYXRvcjtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gMiAmJiB2YWx1ZVsxXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IDAgKyB2YWx1ZTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSAzICYmIHZhbHVlWzJdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMikgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoNSk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPj0gMTApXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDEwKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXl5eS9kZC9NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LU1NLWRkXCIgfHwgdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PSBcInl5eXktZGQtTU1cIikge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMClcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTApO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQvTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvTU0vZGRcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwieXkvZGQvTU1cIiB8fHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJkZC1NTS15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1NTS1kZFwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJNTS1kZC15eVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTVwiKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwMScgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA1ICYmIHZhbHVlWzRdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMykgKyAnMCcgKyB2YWx1ZS5zbGljZSgzKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA2ICYmIHZhbHVlWzVdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDgpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDgpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJkZC9NTU0veXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDEgJiYgdmFsdWVbMF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDEnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PSAyICYmIHZhbHVlWzFdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gMCArIHZhbHVlO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAyKSsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMik7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiZGQvTU1NL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiZGQtTU1NLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMScgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT1cInl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eS1kZC1NTU1cIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gMSAmJiB2YWx1ZVswXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwMCcgKyBzZXBhcmF0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAwICsgdmFsdWU7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gMyAmJiB2YWx1ZVsyXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDIpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSgyKTtcclxuICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgJzAxJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArICcwJyArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDUpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDkpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJ5eXl5L2RkL01NTVwiIHx8IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQgPT0gXCJ5eXl5LWRkLU1NTVwiICkge1xyXG4gICAgICAgIGlmKHZhbHVlLmxlbmd0aCA9PSAxICYmIHZhbHVlWzBdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gJzAwMDAnICsgc2VwYXJhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDIgJiYgdmFsdWVbMV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDMgJiYgdmFsdWVbMl0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnMDAnICsgdmFsdWUuc2xpY2UoMCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcwJyArIHZhbHVlLnNsaWNlKDApO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA1KSArICcwMScgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdID09IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNSkgKyAnMCcgKyB2YWx1ZS5zbGljZSg1KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA4ICYmIHZhbHVlWzddICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNykgKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg3KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSAxMSlcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgMTEpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09XCJNTU0vZGQveXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5XCIgKSB7XHJcbiAgICAgICAgaWYodmFsdWUubGVuZ3RoID09IDQgJiYgdmFsdWVbM10gIT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAzKSArIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDMpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDUgJiYgdmFsdWVbNF0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAxJyArIHZhbHVlLnNsaWNlKDQpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID09IDYgJiYgdmFsdWVbNV0gPT0gc2VwYXJhdG9yKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA0KSsgJzAnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNyAmJiB2YWx1ZVs2XSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDYpKyBzZXBhcmF0b3IgKyB2YWx1ZS5zbGljZSg2KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA+PSA5KVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCA5KTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdCA9PVwiTU1NL2RkL3l5eXlcIiB8fCB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID09IFwiTU1NLWRkLXl5eXlcIiApIHtcclxuICAgICAgICBpZih2YWx1ZS5sZW5ndGggPT0gNCAmJiB2YWx1ZVszXSAhPSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDMpICsgc2VwYXJhdG9yICsgdmFsdWUuc2xpY2UoMyk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNSAmJiB2YWx1ZVs0XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMDEnICsgdmFsdWUuc2xpY2UoNCk7XHJcbiAgICAgICAgZWxzZSBpZih2YWx1ZS5sZW5ndGggPT0gNiAmJiB2YWx1ZVs1XSA9PSBzZXBhcmF0b3IpXHJcbiAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIDQpKyAnMCcgKyB2YWx1ZS5zbGljZSg0KTtcclxuICAgICAgICBlbHNlIGlmKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHZhbHVlWzZdICE9IHNlcGFyYXRvcilcclxuICAgICAgICAgIGlucHV0LnZhbHVlID0gdmFsdWUuc2xpY2UoMCwgNikrIHNlcGFyYXRvciArIHZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICAgIGVsc2UgaWYodmFsdWUubGVuZ3RoID49IDExKVxyXG4gICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCAxMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihjdXJzb3JQb3MgPCBpbnB1dC52YWx1ZS5sZW5ndGggJiYgaW5wdXQudmFsdWUubGVuZ3RoID4gdGhpcy5fdGFzay5tZ0lucHV0RGF0ZUZvcm1hdC5sZW5ndGgpe1xyXG4gICAgICBsZXQgaW5wdXREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgICAgIGxldCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0LTE7XHJcbiAgICAgIGxldCBlbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQtMTtcclxuICAgICAgbGV0IGluZGV4VG9SZW1vdmUgPSBpbnB1dC5zZWxlY3Rpb25TdGFydC0xO1xyXG5cclxuICAgICAgaW5wdXQudmFsdWUgPSBpbnB1dERhdGUuc2xpY2UoMCxpbmRleFRvUmVtb3ZlKSArIGlucHV0RGF0ZS5zbGljZShpbmRleFRvUmVtb3ZlICsgMSk7XHJcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHVwcGVyY2FzZS9sb3dlciBjYXNlXHJcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25DaGFuZ2VFdmVudChldmVudCl7XHJcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuX3Rhc2suZ2V0Rm9ybUNvbnRyb2wodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCApO1xyXG4gICAgbGV0IGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl90YXNrLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEodGhpcy5tYWdpY0Rpci5pZCkuZGF0YVR5cGU7XHJcbiAgICBjb25zdCBjZW50dXJ5ID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0Q2VudHVyeShMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKS5nZXRDb21wSWR4KCkpO1xyXG5cclxuICAgIHN3aXRjaCAgKGF0dHIpXHJcbiAgICB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5mb3JtYXRBbHBoYVVuaWNvZGUgKGNvbnRyb2wpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICB0aGlzLmZvcm1hdEJvb2xlYW4oY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRoaXMuZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KGV2ZW50LnRhcmdldC52YWx1ZSwgY2VudHVyeSwgY29udHJvbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogRm9ybWF0IHllYXIsIGlmIHVzZXIgZW50ZXJzIDIgZGlnaXRzIGluc3RlYWQgb2YgNCBkaWdpdHMgYXMgcGVyIHRoZSBjZW50dXJ5IGdpdmVuIGluIE1hZ2ljLmluaSBmaWxlICovXHJcbiAgZm9ybWF0RGF0ZVdpdGhDZW50dXJ5KHVzZXJJbnB1dDogc3RyaW5nLCBjZW50dXJ5OiBudW1iZXIsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuX3Rhc2subWdJbnB1dERhdGVGb3JtYXQ7XHJcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB1c2VySW5wdXQuaW5jbHVkZXMoJy8nKSA/ICcvJyA6IFwiLVwiO1xyXG4gICAgbGV0IGNlbnR1cnlWYWwgPSBwYXJzZUludChjZW50dXJ5LnRvU3RyaW5nKCkuc2xpY2UoMCwgMikpO1xyXG4gICAgaWYodXNlcklucHV0Lmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gO1xyXG5cclxuICAgIGlmICgoZGF0ZUZvcm1hdCA9PSAnZGQvTU1NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NTS15eXl5JykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2RkLU1NLXl5eXknIHx8IGRhdGVGb3JtYXQgPT0gJ2QvTS95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdkLU0teXl5eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czEoZGF0ZUFycmF5KTtcclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTS1kZC15eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNL2QveXl5eScgfHwgZGF0ZUZvcm1hdCA9PSAnTS1kLXl5eXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZiAoKGRhdGVGb3JtYXQgPT0gJ01NTS9kZC95eXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNTU0tZGQteXl5eScpKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMyKGRhdGVBcnJheSk7XHJcbiAgICAgIGNvbnN0IGlzTW9udGhJbk51bWJlcjogYm9vbGVhbiA9ICFpc05hTihOdW1iZXIobW9udGgpKTtcclxuICAgICAgaWYgKChpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB8fCAoIWlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eXl5L01NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NLWRkJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpO1xyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5eXkvZGQvTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5eXktZGQtTU0nKSkge1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBpZiAoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXl5eS9kZC9NTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5eXktZGQtTU1NJykpIHtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czQoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkZC1NTS15eScgfHwgZGF0ZUZvcm1hdCA9PSAnZC9NL3l5JyB8fCBkYXRlRm9ybWF0ID09ICdkLU0teXknKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAnTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NLWRkLXl5JyB8fCBkYXRlRm9ybWF0ID09ICdNL2QveXknIHx8IGRhdGVGb3JtYXQgPT0gJ00tZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgaWYoKGRheSA8IDMyICYmIG1vbnRoIDwgMTMpKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICd5eS9NTS9kZCcgfHwgZGF0ZUZvcm1hdCA9PSAneXktTU0tZGQnKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHMzKGRhdGVBcnJheSk7XHJcbiAgICAgIGlmKChkYXkgPCAzMiAmJiBtb250aCA8IDEzKSl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXkvZGQvTU0nIHx8IGRhdGVGb3JtYXQgPT0gJ3l5LWRkLU1NJykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzNChkYXRlQXJyYXkpO1xyXG4gICAgICBpZigoZGF5IDwgMzIgJiYgbW9udGggPCAxMykpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ2RkL01NTS95eScgfHwgZGF0ZUZvcm1hdCA9PSAnZGQtTU1NLXl5Jykpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHRoaXMuZ2V0RGF0ZVNlZ21lbnRzMShkYXRlQXJyYXkpO1xyXG4gICAgICBjb25zdCBpc01vbnRoSW5OdW1iZXI6IGJvb2xlYW4gPSAhaXNOYU4oTnVtYmVyKG1vbnRoKSk7XHJcbiAgICAgIGlmICgoaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyICYmIE51bWJlcihtb250aCkgPCAxMykgfHwgKCFpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyKGRheSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZSBpZigoZGF0ZUZvcm1hdCA9PSAneXkvZGQvTU1NJyB8fCBkYXRlRm9ybWF0ID09ICd5eS1kZC1NTU0nKSl7XHJcbiAgICAgIGNvbnN0IGRhdGVBcnJheTogc3RyaW5nW10gPSB1c2VySW5wdXQuc3BsaXQoc2VwYXJhdG9yKTtcclxuICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gdGhpcy5nZXREYXRlU2VnbWVudHM0KGRhdGVBcnJheSk7XHJcbiAgICAgIGNvbnN0IGlzTW9udGhJbk51bWJlcjogYm9vbGVhbiA9ICFpc05hTihOdW1iZXIobW9udGgpKTtcclxuICAgICAgaWYgKChpc01vbnRoSW5OdW1iZXIgJiYgZGF5IDwgMzIgJiYgTnVtYmVyKG1vbnRoKSA8IDEzKSB8fCAoIWlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoZGF5LCBtb250aCwgeWVhciwgc2VwYXJhdG9yLCBjZW50dXJ5LCBjZW50dXJ5VmFsLCBjb250cm9sKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1lbHNlIGlmKChkYXRlRm9ybWF0ID09ICdNTU0vZGQveXknIHx8IGRhdGVGb3JtYXQgPT0gJ01NTS1kZC15eScpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoKGRhdGVGb3JtYXQgPT0gJ3l5eXkvTU1NL2RkJyB8fCBkYXRlRm9ybWF0ID09ICd5eXl5LU1NTS1kZCcgfHxkYXRlRm9ybWF0ID09ICd5eS9NTU0vZGQnIHx8IGRhdGVGb3JtYXQgPT0gJ3l5LU1NTS1kZCcpKXtcclxuICAgICAgY29uc3QgZGF0ZUFycmF5OiBzdHJpbmdbXSA9IHVzZXJJbnB1dC5zcGxpdChzZXBhcmF0b3IpO1xyXG4gICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSB0aGlzLmdldERhdGVTZWdtZW50czMoZGF0ZUFycmF5KTtcclxuICAgICAgY29uc3QgaXNNb250aEluTnVtYmVyOiBib29sZWFuID0gIWlzTmFOKE51bWJlcihtb250aCkpO1xyXG4gICAgICBpZiAoKGlzTW9udGhJbk51bWJlciAmJiBkYXkgPCAzMiAmJiBOdW1iZXIobW9udGgpIDwgMTMpIHx8ICghaXNNb250aEluTnVtYmVyICYmIGRheSA8IDMyKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlWWVhcihkYXksIG1vbnRoLCB5ZWFyLCBzZXBhcmF0b3IsIGNlbnR1cnksIGNlbnR1cnlWYWwsIGNvbnRyb2wpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfWVsc2UgaWYoZGF0ZUZvcm1hdCA9PSAneXl5eS9NTScgfHwgZGF0ZUZvcm1hdCA9PSAneXl5eS1NTScpe1xyXG4gICAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gdXNlcklucHV0LnNwbGl0KHNlcGFyYXRvcik7XHJcbiAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzFdO1xyXG4gICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVswXSk7XHJcbiAgICAgIGlmIChOdW1iZXIobW9udGgpIDwgMTMpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVllYXIoMSwgbW9udGgsIHllYXIsIHNlcGFyYXRvciwgY2VudHVyeSwgY2VudHVyeVZhbCwgY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVllYXIoZGF5Om51bWJlciwgbW9udGg6c3RyaW5nLCB5ZWFyOm51bWJlciwgc2VwYXJhdG9yOnN0cmluZywgY2VudHVyeTpudW1iZXIsIGNlbnR1cnlWYWw6bnVtYmVyLCBjb250cm9sOkFic3RyYWN0Q29udHJvbCl7XHJcbiAgICBsZXQgdXBkYXRlZFllYXIgPSB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyID8gKHllYXIgPCBjZW50dXJ5ICUgMTAwID8gY2VudHVyeVZhbCArIDEgOiBjZW50dXJ5VmFsKSArICcnICsgeWVhciA6XHJcbiAgICAgIHllYXIudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyAoeWVhciA8IGNlbnR1cnkgJSAxMDAgPyBjZW50dXJ5VmFsICsgMSA6IGNlbnR1cnlWYWwpICsgJzAnICsgeWVhciA6XHJcbiAgICAgICAgeWVhcjtcclxuXHJcbiAgICBjb250cm9sLnNldFZhbHVlKG5ldyBEYXRlKGAke3VwZGF0ZWRZZWFyfSR7c2VwYXJhdG9yfSR7bW9udGh9JHtzZXBhcmF0b3J9JHtkYXl9YCkpXHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHMxKGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzFdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMl0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIGdldERhdGVTZWdtZW50czIoZGF0ZUFycmF5KXtcclxuICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlQXJyYXlbMV0pO1xyXG4gICAgY29uc3QgbW9udGggPSBkYXRlQXJyYXlbMF07XHJcbiAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVBcnJheVsyXSk7XHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVNlZ21lbnRzMyhkYXRlQXJyYXkpe1xyXG4gICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVBcnJheVsyXSk7XHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVBcnJheVsxXTtcclxuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZUFycmF5WzBdKTtcclxuICAgIHJldHVybiBbZGF5LCBtb250aCwgeWVhcl07XHJcbiAgfVxyXG5cclxuICBnZXREYXRlU2VnbWVudHM0KGRhdGVBcnJheSl7XHJcbiAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZUFycmF5WzFdKTtcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZUFycmF5WzJdO1xyXG4gICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlQXJyYXlbMF0pO1xyXG4gICAgcmV0dXJuIFtkYXksIG1vbnRoLCB5ZWFyXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjYWxjdWxhdGVQYXR0ZXJuICgpXHJcbiAge1xyXG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLl90YXNrLmdldEZvcm1Db250cm9sKHRoaXMubWFnaWNEaXIucm93SWQsIHRoaXMubWFnaWNEaXIuaWQgKTtcclxuXHJcbiAgICBpZihjb250cm9sICE9IG51bGwgKSB7XHJcbiAgICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fdGFzay5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKHRoaXMubWFnaWNEaXIuaWQpLmRhdGFUeXBlO1xyXG4gICAgICBpZiAoYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IGF0dHIgPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSB7XHJcbiAgICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUGF0dGVybkdlbmVyYXRpb25OZWVkZWQoYXR0ciwgcGljKSkge1xyXG4gICAgICAgICAgbGV0IHBhdHRlcm46IHN0cmluZyA9IHRoaXMuZ2VuZXJhdGVQYXR0ZXJuKGF0dHIsIHBpYyk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IgPT0gbnVsbClcclxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIFZhbGlkYXRvcnMucGF0dGVybihwYXR0ZXJuKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChhdHRyID09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgfHwgYXR0ciA9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yID09IG51bGwpXHJcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHBpYy5nZXRNYXNrTGVuZ3RoKCkpKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gcmUtc2V0IGFsbCB2YWxpZGF0b3JzIGFnYWluXHJcbiAgICAgICAgICAgICAgaWYgKHBpYy5pc0Zvcm1hdEV4cCgpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHRoaXMubWFnaWNEaXIucm93SWQpKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1hZ2ljRGlyLnJvd0lkID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgdGhpcy5fdGFzay5jdXN0b21WYWxpZGF0b3IodGhpcy5tYWdpY0Rpci5yb3dJZCwgdGhpcy5tYWdpY0Rpci5pZCldKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgVmFsaWRhdG9ycy5tYXhMZW5ndGgocGljLmdldE1hc2tMZW5ndGgoKSldKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aChwaWMuZ2V0TWFza0xlbmd0aCgpKSk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUocGljOiBQSUMpOiB2b2lkIHtcclxuICAgIGxldCBtZ0RhdGVGb3JtYXR0ZXIgPSBuZXcgTWdEYXRlRm9ybWF0dGVyKCk7XHJcbiAgICB0aGlzLl90YXNrLm1nSW5wdXREYXRlRm9ybWF0ID0gbWdEYXRlRm9ybWF0dGVyLkNvbnZlcnRNZ0RhdGVGb3JtYXRUb0FuZ3VsYXIocGljLmdldE1hc2soKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBmb3JtYXRBbHBoYVVuaWNvZGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbmV3VmFsdWU6IHN0cmluZyA9IHRoaXMuX3Rhc2suR2V0UmFuZ2VkVmFsdWUodGhpcy5tYWdpY0Rpci5pZCwgdmFsdWUpO1xyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbClcclxuICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgbGV0IHBpYzogUElDID0gdGhpcy5fdGFzay5HZXRDb250cm9sUGljdHVyZU1hc2sodGhpcy5tYWdpY0Rpci5pZCk7XHJcbiAgICAgIGxldCBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3dpdGNoIChtYXNrLmNoYXJDb2RlQXQoaSkpIHtcclxuICAgICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgICAgICB2YWx1ZVN0ci5BcHBlbmQodmFsdWUuY2hhckF0KGkpLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHZhbHVlU3RyLkFwcGVuZCh2YWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWVTdHIuVG9TdHJpbmcoKSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGZvcm1hdEJvb2xlYW4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQgIHtcclxuICAgIGxldCB2YWx1ZTogc3RyaW5nID0gY29udHJvbC52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBuZXdWYWx1ZTogc3RyaW5nID0gdGhpcy5fdGFzay5HZXRSYW5nZWRWYWx1ZSAodGhpcy5tYWdpY0Rpci5pZCAsIHZhbHVlKTtcclxuICAgICAgaWYgKG5ld1ZhbHVlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aCh2YWx1ZS50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmcm9tICBmbGQncyAgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZW5lcmF0ZVBhdHRlcm4gKGF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSwgcGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IHBhdHRlcm46IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIHN3aXRjaCAoYXR0cmlidXRlKVxyXG4gICAge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JOdW1iZXIocGljKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBwYXR0ZXJuID0gdGhpcy5nZW5lcmF0ZVBhdHRlcm5Gb3JBbHBoYShwaWMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdlbmVyYXRlUGF0dGVybkZvck51bWJlcihwaWM6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGF0dGVyblN0cjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyICgpO1xyXG5cclxuICAgIHBhdHRlcm5TdHIuQXBwZW5kKCdeJyk7XHJcbiAgICBpZiAocGljLmlzTmVnYXRpdmUoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmQoJy0/Jyk7XHJcbiAgICBpZiAocGljLmdldFdob2xlcygpKVxyXG4gICAgICBwYXR0ZXJuU3RyLkFwcGVuZEZvcm1hdCgnXFxcXGR7ezB9LHsxfX0nLCAwLCBwaWMuZ2V0V2hvbGVzKCkpO1xyXG4gICAgaWYgKHBpYy5nZXREZWMoKSlcclxuICAgICAgcGF0dGVyblN0ci5BcHBlbmRGb3JtYXQoJyhcXFxcLlxcXFxkezEsezB9fSk/JywgcGljLmdldERlYygpKTtcclxuICAgIHBhdHRlcm5TdHIuQXBwZW5kKCckJyk7XHJcblxyXG4gICAgcmV0dXJuIHBhdHRlcm5TdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBpc1BhdHRlcm5HZW5lcmF0aW9uTmVlZGVkIChhdHRyIDogU3RvcmFnZUF0dHJpYnV0ZSwgcGljIDogUElDKTogYm9vbGVhbiB7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXR1cm4gKHBpYy5nZXRNYXNrQ2hhcnMoKSA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2VuZXJhdGUgcGF0dGVybiBmb3IgQWxwaGFcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdlbmVyYXRlUGF0dGVybkZvckFscGhhKHBpYyA6IFBJQyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY250OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlucHV0QWxsQ2hhcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBjbG9zZVNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0ICBtYXNrOiBzdHJpbmcgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgbGV0ICBwYXR0ZXJuOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuXHJcbiAgICBwYXR0ZXJuLkFwcGVuZCgnXicpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG1hc2subGVuZ3RoOylcclxuICAgIHtcclxuICAgICAgLy9zdGFydCBuZXcgc3Vic2V0ICwgaWYgbWFza1tpXSBpcyBvbmUgb2YgdGhlc2UuXHJcbiAgICAgIGlmIChpbnB1dEFsbENoYXJzICYmIChtYXNrLmNoYXJDb2RlQXQoaSkgPT0gUElDSW50ZXJmYWNlLlBJQ19OIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX1UgfHwgbWFzay5jaGFyQ29kZUF0KGkpID09IFBJQ0ludGVyZmFjZS5QSUNfTFxyXG4gICAgICAgIHx8IG1hc2suY2hhckNvZGVBdChpKSA9PSBQSUNJbnRlcmZhY2UuUElDX1gpKVxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoJygnKTtcclxuICAgICAgICBjbG9zZVNldCA9IHRydWU7XHJcbiAgICAgICAgaW5wdXRBbGxDaGFycyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjbnQgPSAwO1xyXG4gICAgICBzd2l0Y2ggKG1hc2suY2hhckNvZGVBdChpKSlcclxuICAgICAge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19VOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19YOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19MOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKCcuJyk7XHJcbiAgICAgICAgICBsZXQgaW5wdXRBbGxDaGFyc1JlZjogUmVmUGFyYW08Ym9vbGVhbj4gPSBuZXcgUmVmUGFyYW08Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgICAgICAgbGV0IGRpcnM6IHN0cmluZyA9ICBQSUNJbnRlcmZhY2UuUElDX1UudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGRpcnMgKz0gUElDSW50ZXJmYWNlLlBJQ19MLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBkaXJzICs9IFBJQ0ludGVyZmFjZS5QSUNfWC50b1N0cmluZygpO1xyXG4gICAgICAgICAgY250ID0gdGhpcy5nZXREaXJlY3RpdmVDb3VudChtYXNrLCBpLCBkaXJzLCBpbnB1dEFsbENoYXJzUmVmKTtcclxuICAgICAgICAgIGlucHV0QWxsQ2hhcnMgPSBpbnB1dEFsbENoYXJzUmVmLnZhbHVlO1xyXG4gICAgICAgICAgaSArPSBjbnQ7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19OOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKCdcXFxcZCcpO1xyXG4gICAgICAgICAgbGV0IGlucHV0QWxsQ2hhcnNSZWY6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtPGJvb2xlYW4+KGZhbHNlKTtcclxuICAgICAgICAgIGNudCA9IHRoaXMuZ2V0RGlyZWN0aXZlQ291bnQobWFzaywgaSwgUElDSW50ZXJmYWNlLlBJQ19MLnRvU3RyaW5nKCksIGlucHV0QWxsQ2hhcnNSZWYpO1xyXG4gICAgICAgICAgaW5wdXRBbGxDaGFycyA9IGlucHV0QWxsQ2hhcnNSZWYudmFsdWU7XHJcbiAgICAgICAgICBpICs9IGNudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHBhdHRlcm4uQXBwZW5kKG1hc2tbaV0pO1xyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNudCA+IDApXHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmRGb3JtYXQoJ3t7MH0sezF9fScsIGlucHV0QWxsQ2hhcnMgPyBjbnQgOiAwLCBjbnQpO1xyXG4gICAgICBpZiAoY2xvc2VTZXQpXHJcbiAgICAgICAgcGF0dGVybi5BcHBlbmQoJyknKTtcclxuICAgICAgY2xvc2VTZXQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcbiAgICBwYXR0ZXJuLkFwcGVuZCgnJCcpO1xyXG4gICAgcmV0dXJuIHBhdHRlcm4uVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXREaXJlY3RpdmVDb3VudChtYXNrOiBzdHJpbmcsIGlkeDogbnVtYmVyLCBwYXR0ZXJuOiBzdHJpbmcsIGNoYW5nZUluUGF0dGVybjogUmVmUGFyYW08Ym9vbGVhbj4gKTogbnVtYmVyICB7XHJcblxyXG4gICAgY2hhbmdlSW5QYXR0ZXJuLnZhbHVlID0gZmFsc2U7XHJcbiAgICBsZXQgcGF0dGVybkNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGZpbmQgbWF4IGNoYXJzXHJcbiAgICB3aGlsZSAoaWR4IDwgbWFzay5sZW5ndGggJiYgdGhpcy5Jc1BhdHRlcm5NYXRjaGVzKG1hc2suY2hhckNvZGVBdChpZHgpLnRvU3RyaW5nKCksIHBhdHRlcm4pKVxyXG4gICAgeyBwYXR0ZXJuQ291bnQrKzsgaWR4Kys7IH1cclxuXHJcblxyXG4gICAgaWYgKGlkeCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICBjaGFuZ2VJblBhdHRlcm4udmFsdWUgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBwYXR0ZXJuQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgSXNQYXR0ZXJuTWF0Y2hlcyhtYXNrOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGZvciAobGV0IGk6bnVtYmVyID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspXHJcbiAgICAgIGlmIChtYXNrID09IHBhdHRlcm5baV0pXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -3558,23 +3558,18 @@ class MgformatMagicDirective {
3558
3558
  const dateArray = userInput.split(separator);
3559
3559
  const [day, month, year] = this.getDateSegments1(dateArray);
3560
3560
  const isMonthInNumber = !isNaN(Number(month));
3561
- if (isMonthInNumber == true) {
3562
- if (day < 32 && Number(month) < 13) {
3563
- this.updateYear(day, month, year, separator, century, centuryVal, control);
3564
- }
3565
- }
3566
- else if (day < 32) {
3561
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3567
3562
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3568
3563
  }
3569
3564
  }
3570
- else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy')) {
3565
+ else if ((dateFormat == 'dd/MM/yyyy' || dateFormat == 'dd-MM-yyyy' || dateFormat == 'd/M/yyyy' || dateFormat == 'd-M-yyyy')) {
3571
3566
  const dateArray = userInput.split(separator);
3572
3567
  const [day, month, year] = this.getDateSegments1(dateArray);
3573
3568
  if ((day < 32 && month < 13)) {
3574
3569
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3575
3570
  }
3576
3571
  }
3577
- else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy')) {
3572
+ else if ((dateFormat == 'MM/dd/yyyy' || dateFormat == 'MM-dd-yyyy' || dateFormat == 'M/d/yyyy' || dateFormat == 'M-d-yyyy')) {
3578
3573
  const dateArray = userInput.split(separator);
3579
3574
  const [day, month, year] = this.getDateSegments2(dateArray);
3580
3575
  if ((day < 32 && month < 13)) {
@@ -3585,12 +3580,7 @@ class MgformatMagicDirective {
3585
3580
  const dateArray = userInput.split(separator);
3586
3581
  const [day, month, year] = this.getDateSegments2(dateArray);
3587
3582
  const isMonthInNumber = !isNaN(Number(month));
3588
- if (isMonthInNumber == true) {
3589
- if (day < 32 && Number(month) < 13) {
3590
- this.updateYear(day, month, year, separator, century, centuryVal, control);
3591
- }
3592
- }
3593
- else if (day < 32) {
3583
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3594
3584
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3595
3585
  }
3596
3586
  }
@@ -3612,23 +3602,18 @@ class MgformatMagicDirective {
3612
3602
  const dateArray = userInput.split(separator);
3613
3603
  const [day, month, year] = this.getDateSegments4(dateArray);
3614
3604
  const isMonthInNumber = !isNaN(Number(month));
3615
- if (isMonthInNumber == true) {
3616
- if (day < 32 && Number(month) < 13) {
3617
- this.updateYear(day, month, year, separator, century, centuryVal, control);
3618
- }
3619
- }
3620
- else if (day < 32) {
3605
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3621
3606
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3622
3607
  }
3623
3608
  }
3624
- else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy')) {
3609
+ else if ((dateFormat == 'dd/MM/yy' || dateFormat == 'dd-MM-yy' || dateFormat == 'd/M/yy' || dateFormat == 'd-M-yy')) {
3625
3610
  const dateArray = userInput.split(separator);
3626
3611
  const [day, month, year] = this.getDateSegments1(dateArray);
3627
3612
  if ((day < 32 && month < 13)) {
3628
3613
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3629
3614
  }
3630
3615
  }
3631
- else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy')) {
3616
+ else if ((dateFormat == 'MM/dd/yy' || dateFormat == 'MM-dd-yy' || dateFormat == 'M/d/yy' || dateFormat == 'M-d-yy')) {
3632
3617
  const dateArray = userInput.split(separator);
3633
3618
  const [day, month, year] = this.getDateSegments2(dateArray);
3634
3619
  if ((day < 32 && month < 13)) {
@@ -3652,24 +3637,43 @@ class MgformatMagicDirective {
3652
3637
  else if ((dateFormat == 'dd/MMM/yy' || dateFormat == 'dd-MMM-yy')) {
3653
3638
  const dateArray = userInput.split(separator);
3654
3639
  const [day, month, year] = this.getDateSegments1(dateArray);
3655
- if ((day < 32 && month < 13)) {
3640
+ const isMonthInNumber = !isNaN(Number(month));
3641
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3656
3642
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3657
3643
  }
3658
3644
  }
3659
3645
  else if ((dateFormat == 'yy/dd/MMM' || dateFormat == 'yy-dd-MMM')) {
3660
3646
  const dateArray = userInput.split(separator);
3661
3647
  const [day, month, year] = this.getDateSegments4(dateArray);
3662
- if ((day < 32 && month < 13)) {
3648
+ const isMonthInNumber = !isNaN(Number(month));
3649
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3663
3650
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3664
3651
  }
3665
3652
  }
3666
3653
  else if ((dateFormat == 'MMM/dd/yy' || dateFormat == 'MMM-dd-yy')) {
3667
3654
  const dateArray = userInput.split(separator);
3668
3655
  const [day, month, year] = this.getDateSegments2(dateArray);
3669
- if ((day < 32 && month < 13)) {
3656
+ const isMonthInNumber = !isNaN(Number(month));
3657
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3658
+ this.updateYear(day, month, year, separator, century, centuryVal, control);
3659
+ }
3660
+ }
3661
+ else if ((dateFormat == 'yyyy/MMM/dd' || dateFormat == 'yyyy-MMM-dd' || dateFormat == 'yy/MMM/dd' || dateFormat == 'yy-MMM-dd')) {
3662
+ const dateArray = userInput.split(separator);
3663
+ const [day, month, year] = this.getDateSegments3(dateArray);
3664
+ const isMonthInNumber = !isNaN(Number(month));
3665
+ if ((isMonthInNumber && day < 32 && Number(month) < 13) || (!isMonthInNumber && day < 32)) {
3670
3666
  this.updateYear(day, month, year, separator, century, centuryVal, control);
3671
3667
  }
3672
3668
  }
3669
+ else if (dateFormat == 'yyyy/MM' || dateFormat == 'yyyy-MM') {
3670
+ const dateArray = userInput.split(separator);
3671
+ const month = dateArray[1];
3672
+ const year = Number(dateArray[0]);
3673
+ if (Number(month) < 13) {
3674
+ this.updateYear(1, month, year, separator, century, centuryVal, control);
3675
+ }
3676
+ }
3673
3677
  }
3674
3678
  updateYear(day, month, year, separator, century, centuryVal, control) {
3675
3679
  let updatedYear = year.toString().length === 2 ? (year < century % 100 ? centuryVal + 1 : centuryVal) + '' + year :